Djangoフレームワーク9

Djangoフレームワーク9


1.djangoリクエストのライフサイクル

ミドルウェア2.django

これは、ジャンゴへのゲートウェイであります

長いグローバル関連する機能として、ジャンゴミドルウェアで考慮されるべきであるとして、あなたは完全に支援します

グローバルユーザID認証

グローバル・ユーザーのアクセス頻度チェック

ブラックリストへのユーザーアクセス

ホワイトリストのユーザーアクセス

Djangoのデフォルト7つのミドルウェア

        MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ]

Djangoは、ユーザー定義のミドルウェアをサポートしています

class SessionMiddleware(MiddleWareMixin):
    def process_request(self, request):
    
    def process_response(self, request, response):
        
class CsrfViewMiddleware(MiddlewareMixin):
    def process_request(self, request):
    
    def process_view(self, request, callback, callback_args, callback_kwags):
    
    def process_respose(self, request, response):
        
           
        
class AuthentiactionMiddleware(MiddlewareMixin):
    def process_request(self, request):
    
    

ミドルウェア、ユーザーにユーザー定義の方法を実行しているDjangoの5つの露出をカスタマイズすることができます

マスター:
process一:

要求が構成ファイルで実行されると次にスキップしない場合、順次、各中間process一方法内側中間下から順に登録されています

リターンの同じレベルは、すべてのprocess_responseを実行しません。

process_response:

応答時間は、連続的に順次下の内側から各ブローカーをprocess_response、方法は2つのパラメータを持っている必要がありますミドルウェアに登録プロファイルに従って行われ、応答パラメータを返すために必要、あれば行きます独自の内部戻ったHttpResponseオブジェクトは自分自身でそれを置き換えるために、ユーザーのブラウザの内容を返します。

学習:
process_view

ビュー機能の実装を成功さをルーティングする前に、トリガー一致

process_template_response

Viewオブジェクトはrenderメソッドをレンダリングするために、対応する関数属性によって返されなければなりません

def index(request):
    def render():
        return HttpResponse('你好啊')
    obj = HttpResopnse("index")
    obj.render = render
    return obj

process_exception

ビュー機能は、自動的にエラーをトリガした場合

CSRF 3.csrf

フィッシングサイト

自然は受取人を正確に通常と同じページにウェブサイトをセットアップし、ユーザーは通常のサービスサイトの終わりに向かって、実際に転送要求を提出し、ページ上の伝達関数を完了し、異なるアカウントの唯一の違いの嘘

どのようにcrsfチェックフォームフォーム

あなただけのフォームでフォームを作成する必要があります

{%csrf_token%}

アヤックスチェックする方法CSRF

第一种方式 自己手动获取
data:{'username':'jason', 'csrfmiddlewaretoken':$('input[name="csrfmiddlewaretoken"]').val()}
第二种方式   利用模板语法
data:{'username':'jason','crsfmiddlewaretoken':'{{ csrf_token }}'}
第三种 通用方式 引入外部js文件   官网提供的方式
<% load static %>
<script src="{% static 'myset.js' %}"></script>
data: {'username': 'jason'}

関連デコレータCSRF

いくつかのビュー機能をチェックしませんので、我々は、時間CSRFウェブサイト全体のチェックを持っている場合

私たちは、全体としてcrsfにサイトをチェックしていない場合は、いくつかのビュー機能チェックをしましょう

        from django.views.decorators.csrf import csrf_exempt, csrf_protect
        from django.views import View9
        from django.utils.decorators import method_decorator

        # @method_decorator(csrf_protect,name='post')  # 第二种指名道姓的给类中某个方法装
        # @method_decorator(csrf_exempt,name='post')  # csrf_exempt 第二种方式不行
        @method_decorator(csrf_exempt,name='dispatch')  # 可以!!!
        class MyHome(View):  # APIView
            # @method_decorator(csrf_protect)  # 第三种 类中所有的方法都装
            # @method_decorator(csrf_exempt)  # csrf_exempt 第三种方式可以
            def dispatch(self, request, *args, **kwargs):
                return super().dispatch(request,*args,**kwargs)

            def get(self,request):
                return HttpResponse('get')
            # @method_decorator(csrf_protect)  # 第一种方式
            # @method_decorator(csrf_exempt)  # csrf_exempt 第一种方式不行
            def post(self,request):
                return HttpResponse('post')

CBVデコレータ推奨テンプレートmethod_decoratorに追加

当社独自のデコレータと一貫した使用のcsrf_protectを書きます

Csrf_exempt唯一の例外は、インストール発送方法の例外です

4.auth認証モジュール

ジャンゴ自身のユーザ関連機能モジュールの表AUTH_USER

スーパーユーザを作成する方法:

createsupperuser

インポートモジュール

django.contrib mport認証から

django.contrib.auth.modelsインポートユーザーから

認証方法Daquanの

ユーザーを作成します。1.

User.objects.create()   # 密码都是明文
User.objects.createuser()   # 创建普通用户
User.objects.createsuperuser()  # 创建超级用户,邮箱要给数据

ユーザー名とパスワードが正しいことを確認してください。2.

auth.authenticate(username=username,password=password) #密码和用户名两个一个都不能少
# 该方法当用户名和密码正确的时候返回用户对象 不正确返回none

3.保存したユーザのログイン状態

auth.login(request, user_obj)
# 这句执行完以后 request.user获取当前登录的用户对象

現在のユーザーがログオンしているとどのように電流がログオンして取得するユーザーオブジェクトを判断する方法4

request.user.is_authenticcated()    # 判断是否登录
request.user    # 登录用户对象

ユーザーがログインしているかどうかをチェック5.

form django.contrib.auth.deorators import login_required
# 局部配置
@login_required(login_url='/login/')
def xxx(request):
    return HttpResponse('xxx页面')

# 全局配置
配置文件中写以下代码
LOGIN_URL = '/login/'
@login_required
def xxx(request):
    return HttpResponse('xxx页面')

如果两个都设置了,那么优先执行局部配置

6.パスワードの変更

request.user.check_password(old_password)   # 校验原密码是否正确
request.User.set_password(new_pssword)
request.user.save()     # 一定要保存

7.ログアウト機能

auth.logout(リクエスト)

AUTH_USERテーブルを拡張する方法

1. 1つのテーブルの関係

2.クラスの継承を使用します

            # 1 类的继承
            from django.contrib.auth.models import User,AbstractUser
            # Create your models here.
            class Userinfo(AbstractUser):
                phone = models.BigIntegerField()
                avatar = models.FileField()
                # 扩展的字段 尽量不要与原先表中的字段冲突
        
            # 2 配置文件
            AUTH_USER_MODEL = '应用名.表名'
            """
            django就会将userinfo表来替换auth_user表
            并且之前auth模块所有的功能不变 参照的也是userinfo表
            """

5.BBSテーブルの設計

用户表 
                继承auth_user表
                phone
                avatar
                register_time
            
            个人站点表
                站点名称
                
                站点标题
                
                站点样式
            
            文章分类表
                分类名
            
            文章标签表
                标签名
            
            文章表
                文章标题
                文章摘要
                文章详情
                创建日期
                
            
            点赞点踩表
                user          一对多用户
                article       一对多文章
                is_up         布尔值字段
                
            
            文章评论表
                user          一对多用户
                article       一对多文章
                content       普通字段
                create_time   评论日期
                
                parent  ForeginKey(to='文章评论表')
                parent  ForeginKey(to='self')
        
        
        根评论子评论

おすすめ

転載: www.cnblogs.com/godlover/p/12193732.html