ジャンゴ之クッキー、セッション、トークン

クッキー与セッション

目的:クライアントの状態を保存します

理由:HTTPプロトコルはステートレスであるため、

HTTPプロトコルはステートレスなので、我々は技術を発明する必要があることをユーザーに保存することができますので、

クッキー:

クッキーは、キーはい、サーバによって生成され、クライアントブラウザの右側に保存され、その後、保存するために、クライアントのブラウザに送信されます。そのため、許可を書いたブラウザがクッキーを禁止され、ブラウザでこの機能を設定することができます。

どのようにジャンゴ操作クッキー:

    obj = HttpResponse()  # 利用obj对象才能操作cookie
    return obj

    obj = render()
    return obj

    boj = redirect()
    return obj 

セットクッキー:obj.set_cookie( 'K1'、 'V1')

    obj.set_cookie('k1','v1')  # 告诉浏览器设置

获取クッキー:request.COOKIES.get( 'K1')

request.COOKIES.get('k1')   # 获取浏览器携带过来的cookie值

設定されたタイムアウト:obj.set_cookie( 'K1'、 'V1'、max_ageの= 3)

obj.set_cookie('k1','v1',max_age=3)  # 针对谷歌浏览器,用max_age
obj.set_cookie('k1','v1',expires=3)  # 针对IE浏览器,用expires

削除クッキーは、(ログアウト、ログアウト)、一般的に削除されません。

Cookieベースのユーザーは、パリティを達成ログイン

装饰器
    用户在没有登录之前如果访问了一个需要登录之后才能访问的页面
    那么会先跳转到登录页面 用户输入用户名和密码并正确的情况下
    再自动跳转到之前用户想要访问的页面
        1.request.path_info
        2.利用get请求携带参数的方法

セッション:

セッションは、キーと値のペア上記サーバ側に保存されています

セッションの作業メカニズムクッキーに依存する必要があります

设置セッション:ますrequest.session [ 'K1'] = 'V1'

request.session['k1'] = 'v1'
#  第一次设置的时候会报错,是因为你没有执行数据库迁移命令 生成django需要用到的一些默认表(django_session)
# django默认的session失效时间是14天  2周
request.session['k1'] = 'v1'

"""
执行上面这一句代码会发生了哪些事儿
1.djang内部自动帮你调用算法生成一个随机的字符串
2.在django_session表中添加数据(数据也是加密处理)
随机字符串         加密之后的数据           失效时间
ashdjsad            jsadsada
3.将产生的随机字符串返回给客户端浏览器 让浏览器保存
sessionid:随机字符串
"""

获取セッション:request.session.get( 'K1')

request.session.get('k1')
"""
1.django内部会自动去请求头里面获取cookie
2.拿着sessionid所对应的随机字符串去django_sessoion表中一一比对
3.如果比对上了 会将随机字符串对应的数据获取出来 自动放入request.session中供程序员调用
如果没有就是一个空字典
"""

删除セッション:request.session.delete()

request.session.delete()
# 客户端和服务端全部删除  只会根据浏览器的不同删对应的数据

セット有効期限:request.session.set_expiry(値)

# 设置会话Session和Cookie的超时时间
request.session.set_expiry(value)
    * 如果value是个整数,session会在些秒数后失效。
    * 如果value是个datatime或timedelta,session就会在这个时间后失效。
    * 如果value是0,用户关闭浏览器session就会失效。
    * 如果value是None,session会依赖全局session失效策略。

ログインセッションのバージョンチェック:

from functools import wraps


def check_login(func):
    @wraps(func)
    def inner(request, *args, **kwargs):
        next_url = request.get_full_path()
        if request.session.get("user"):
            return func(request, *args, **kwargs)
        else:
            return redirect("/login/?next={}".format(next_url))
    return inner


def login(request):
    if request.method == "POST":
        user = request.POST.get("user")
        pwd = request.POST.get("pwd")

        if user == "alex" and pwd == "alex1234":
            # 设置session
            request.session["user"] = user
            # 获取跳到登陆页面之前的URL
            next_url = request.GET.get("next")
            # 如果有,就跳转回登陆之前的URL
            if next_url:
                return redirect(next_url)
            # 否则默认跳转到index页面
            else:
                return redirect("/index/")
    return render(request, "login.html")


@check_login
def logout(request):
    # 删除所有当前请求相关的session
    request.session.delete()
    return redirect("/login/")


@check_login
def index(request):
    current_user = request.session.get("user", None)
    return render(request, "index.html", {"user": current_user})

Session版登录验证

データは、ブラウザ用に作成されたセッションジャンゴ

次のように複数のデータベースがあるように:

データベースソフトウェア

ファイル

メモリ

トークン:暗号化された文字列

暗号文の文字に暗号化を使用して文字列処理アルゴリズム

ミドルウェアジャンゴ

ジャンゴミドルウェアの紹介

プロジェクトファイルにDjangoのsettings.pyファイルは、ミドルウェアミドルウェアのリストがあり、デフォルトで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のミドルウェア使用することを検討すべきいくつかのサイトのグローバル関数やりたいと
検証1.グローバルユーザーログインを
2回のグローバルユーザアクセス頻度のチェックを
3.グローバルなユーザー権限を確認してください()のコードの20行100+ RBAC

言われている:すべてのフレームワークでは、ジャンゴミドルウェアは最も完璧です

カスタム方法5

ジャンゴミドルウェアのサポートユーザー定義では、5つのメソッドをカスタマイズすることができます提供します。

1、process一

process一続く要求方法を順次ミドルウェア内で定義された各プロファイルの設定の上から下への順序で実行するとき、ミドルウェア方法れていない場合、次の中間の内部スキップ実行。

任意のミドルウェア・リターンHttpResponseオブジェクトたら、名前の要求がすぐにその後、バックトラックに停止、され、

2、process_response

2.1応答時間は順番に、下から順に従って、各ブローカー内で定義されたprocess_responseメソッドプロファイルの設定を移動します。
2.2方法は、2つのパラメータを有していなければならない、および応答パラメータを返す必要があり、それはエラー戻らない
方法は何も(HttpResponsedオブジェクト)を返していない2.3を得られるものの前端

注:process一方法が返された場合はHttpResponseオブジェクトはミドルウェアが実行されていない、内部process_respone現在のミドルウェアから直接戻りますが、もはや実行していないだろう

3、process_view(自己、リクエスト、VIEW_NAME、* argsを、** kwargsから)

正常3.1ルーティングマッチした後、トリガ機能のビューを実行する前に
方法は、次に内部process_response方法一度各ブローカを介して下から上HttpResponseオブジェクトに戻ります3.2

4、process_template_respose

1.あなたが返すオブジェクトは、下位から上方に向けて引き金となるrenderメソッドに属性ポイントをレンダリング含ま

def mdzz(request):
    print('我是视图函数mdzz')
    def render():
        return HttpResponse('你好呀 我是奇葩')
    obj = HttpResponse('我很好 好的像个傻逼一样')
    obj.render = render
    return obj

5、にprocess_exception

エラーが発生したときにビュー機能は、自動的に注文が下から上にあるトリガされます。

CRMの顧客関係管理システム

カスタマー・リレーションシップ・経営管理論

おすすめ

転載: www.cnblogs.com/allenchen168/p/11991118.html