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 /インデックス/
入力、管理者、管理者
インデックスページに直接ジャンプ
しますが、ログインページにアクセスし、次の時間は、ホームページにジャンプします
「ログアウト」をクリックします。
戻るログイン画面へ