パイソン - ジャンゴ - 着陸チェックのデコレータバージョン

urls.py:

django.conf.urlsがURLをインポートから
app01インポートビューから


urlpatterns = [ 
    URL(R '^ログイン/'、views.login)、
    URL(R '^ホーム/'、views.home)、
    URL(R '^インデックス/ 」、views.index)、
    URL(R '^ログアウト/'、views.logout)
]

views.py:

リダイレクト、からレンダリングdjango.shortcutsをインポート
app01インポートモデルから

functoolsインポートラップから


#ログイン検証デコレータ
:DEFのcheck_login(FUNC)
    @wraps(FUNC)#デコレータ修理技術
    デフインナー(要求、* argsを、 ** kwargsから):
        RET = request.get_signed_cookie( "ログイン"、デフォルト= "0"、塩= "whoamiを")
        RET == "成功" IF: はすでにを続け、ログイン
            リターンFUNC(要求、* argsを、 ** kwargsから
        それ以外:
            #そうでない場合は、ログインページにジャンプ
            next_url = request.path_info#現在の訪問のURL取得
            #next_url = request.get_full_path()#をパスし、現在のリクエストのパラメータを取得する
            リターンリダイレクト(「/ログイン/を次 = {}?」 。フォーマット(next_url)) 
    内部戻り


デフログイン(リクエスト):
    :request.method == "POST"であれば
        、ユーザ名= request.POST.get( "ユーザー")
        パスワード= request.POST.get( "PWD")
        (next_url = request.GET.get "次")

        の場合、ユーザー名== "管理者"とパスワード== "管理者":
            もしnext_url:
                担当者=リダイレクト(next_url)#得到一个响应对象
            他:
                担当者=リダイレクト(" /ホーム/ ")#得到一个响应对象
            #担当者.set_cookie( "ログイン"、 "成功")#设置クッキー
            rep.set_signed_cookie( "ログイン"、 "成功"、塩= "whoamiは")#设置クッキー并加盐
            リターン担当者

    RET =要求。get_signed_cookie( "ログイン"、デフォルト= "0"、塩= "whoamiを") 
    RET == "成功"の場合:
        リターンリダイレクト(「/ホーム/」 )# あなたがログインしている場合は、その後、アクセスのログイン、ホームに直接ジャンプ
    他:
        レンダリング(リクエスト、「login.htmlと」)を返し


DEFホーム(要求):
    #RET = Request.Cookies。 ( "ログイン")#クッキー値の取得取得
    RET = request.get_signed_cookieを( "ログイン"、デフォルトは"0"は、塩= "whoamiは" =)#は、クッキー値の塩を取得
    IF RET == "成功": をクッキー認証が成功すると
        、レンダリングのリターン(要求、「home.html」) 他の
        リターンリダイレクト(「/ログイン/」)


@check_login 
DEF指数(要求): 
    (、「index.html の」リクエスト)レンダリングを返す


#キャンセル機能
(デフログアウト要求):
    REP =リダイレクト( "/ /ログイン") 
    rep.delete_cookie(" "ログイン)#删除クッキー
    担当者を返します

login.htmlと:

<!DOCTYPE HTML> 
<HTML LANG = "EN"> 
<HEAD> 
    <メタ文字コード= "UTF-8"> 
    <タイトル>登录页面</ TITLE> 
</ HEAD> 
<BODY> 

<P>登录页面</ P > 

<フォームアクション= "{{request.get_full_path}}" METHOD = "POST"> 
    {%csrf_token%} 
    <P> 
        账号:
        の<input type = "text"の名= "ユーザ"> 
    </ P> 
    <P> 
        密码:
        の<input type = "text" NAME = "PWD"> 
    </ P> 
    <P> 
        の<input type = "提出"値= "登录"> 
    </ P>
</ FORM> 

</ BODY> 
</ HTML>

home.html:

<!DOCTYPE HTML> 
<HTML LANG = "EN"> 
<HEAD> 
    <METAのcharset = "UTF-8"> 
    <タイトル>プロフィールページ</ TITLE> 
</ HEAD> 
<BODY> 

<P>プロフィールページ< / P> 

<a href="/logout/">キャンセルする</a> 

</ BODY> 
</ HTML>

index.htmlを:

<!DOCTYPE HTML> 
<HTML LANG = "EN"> 
<HEAD> 
    <メタ文字コード= "UTF-8"> 
    <タイトル>主页面</ TITLE> 
</ HEAD> 
<BODY> 

<P>主页面</ P > 

</ BODY> 
</ HTML>

訪問は、http://127.0.0.1:8888 /インデックス/

 

入力、管理者、管理者

 

インデックスページに直接ジャンプ
しますが、ログインページにアクセスし、次の時間は、ホームページにジャンプします

 

「ログアウト」をクリックします。

 

 戻るログイン画面へ

おすすめ

転載: www.cnblogs.com/sch01ar/p/11440750.html