セッションプロジェクトファイル:
テンプレートテンプレート:
login.htmlと
1 {%負荷静的%} 2 <!DOCTYPE HTML > 3 < HTML のlang = "EN" > 4 < ヘッド> 5 < メタのcharset = "UTF-8" > 6 < タイトル>ログイン</ タイトル> 7 </ ヘッド> 8 < ボディ> 9 < DIV > 10 用户名:< 入力タイプ= "テキスト" ID = "ユーザ名"> 11 密码:< 入力タイプ= "パスワード" ID = "パスワード" > < BR > 12 < ボタンID = "送信" >登录</ ボタン> < パンID = "警告" スタイル= "色:赤" > < / パン> 13 {%csrf_token%} 14 </ DIV > 15 </ ボディ> 16 < スクリプトSRC jqueryの-3.4.1」= "{%、静的。jsの%}」 > </ スクリプト> 17。 {#<! - <SCRIPT SRC = "{%静的な'JS / login.js'}%"> </ SCRIPT> - > <! - アヤックスは、URLが解析を逆に持っているだけに置きますHTMLテンプレートに- > #} 18である < スクリプト> 。19 $(関数(){ 20 $(' #submit ' ).click(関数(){ 21は $アヤックス({ 22は :URL " {%URL「ログイン「}%」、 23は タイプ:' POST ' 、 24 データ: { 25 ユーザ名:$(' #username ' ).val()、 26 パスワード:$(' #password ' ).val()、 27 csrfmiddlewaretoken:$(' 入力[名前= csrfmiddlewaretoken] ' ).val()、// 可以直接放在ヘッダ里边 28 }、 29 成功:関数(応答){ 30 にconsole.log(レスポンス) 31 であれば(のResponse.Status === 0 ){ 32 //$( '#が提出')。 (後に'<span>の<私> 「口座番号やパスワードが</ I> </ span>を誤っている) 33がある ($ ' #warning ' )の.text(' 口座番号やパスワードが間違っています」) 34は } そう IF (のResponse.Status === 1 ){ 35 LOCATION.HREF = response.url 36 } 37 } であり、38 }) 39 )} 40 )}; 41である </ スクリプト> 42です </ HTML >
index.htmlを
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>index</title> 6 </head> 7 <body> 8 <div> 9 <h1>欢迎来到首页</h1> 10 </div> 11 <a href='{% url 'more' %}'>more</a> 12 </body> 13 </html>
more.html
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>more</title> 6 </head> 7 <body> 8 <div><h1>更多信息</h1></div> 9 </body> 10 </html>
viwes.py
1 from django.shortcuts import render,redirect 2 from django.http import JsonResponse 3 from django.urls import reverse 4 # Create your views here. 5 def login(request): 6 if request.method=='GET': 7 return render(request,'login.html') 8 elif request.method=='POST': 9 name=request.POST.get('username') 10 psd=request.POST.get('password') 11 if name=='yang' and psd=='123': 12 #在使用session之前必须在数据库创建相关的表(django_session) 13 #调用request.session首先会接收请求头部的cookie是否有sessionid,进行表查询对比 14 #如果有重新生成一个sessionid进行覆盖更新记录, 15 # 没有则新建存进表中的session_key,同时将字典信息加密自动存进表中的session_data字段 16 request.session['status']=True 17 request.session['name']=name 18 status=1 19 url=reverse('index') 20 else: 21 status=0 22 url='' 23 return JsonResponse({'status':status,'url':url}) 24 25 def login_auth(func): 26 def inner(request): 27 if request.session.get('status'):#在判断网页请求的状态时,直接调用request.session从djang_session表中读取数据验证 28 return func(request) 29 else: 30 return redirect('login') 31 return inner 32 @login_auth 33 def index(request): 34 return render(request,'index.html') 35 36 @login_auth 37 def more(request): 38 # request.session.flush()#同时删除客户端和服务端的session 39 return render(request,'more.html')
urls.py
1 from django.conf.urls import url 2 from django.contrib import admin 3 from app01 import views 4 5 urlpatterns = [ 6 url(r'^admin/', admin.site.urls), 7 url(r'^login/', views.login, name='login'), 8 url(r'^index/', views.index, name='index'), 9 url(r'^more/', views.more, name='more'), 10 ]