1. 程式人生 > >DJANGO用戶登錄驗證完整代碼

DJANGO用戶登錄驗證完整代碼

shortcut ssi 維表 color info pri -c http 自動

1,urls.py內容:

技術分享圖片
from django.conf.urls import url 
from django.contrib import admin
from myApp import views
urlpatterns = [
    url(r^admin/, admin.site.urls),
    url(r^login/$, views.login),
    url(r^index/$, views.index),
]
View Code

2,views.py內容

說明:

  要使用session前提是要在settings.py文件中session註冊了

如下:

技術分享圖片

技術分享圖片
# -*- coding: utf-8 -*-
from django.shortcuts import render, redirect, HttpResponse

# Create your views here.
# from django.contrib import auth
# from django.contrib.auth.decorators import login_required

from myApp.models import Students,Grades,User
from functools import wraps
# 說明:這個裝飾器的作用,就是在每個視圖函數被調用時,都驗證下有沒法有登錄,
# 如果有過登錄,則可以執行新的視圖函數, # 否則沒有登錄則自動跳轉到登錄頁面。 def check_login(f): @wraps(f) def inner(request,*arg,**kwargs): if request.session.get(is_login)==1: return f(request,*arg,**kwargs) else: return redirect(/login/) return inner def login(request):
# 如果是POST請求,則說明是點擊登錄按扭 FORM表單跳轉到此的,那麽就要驗證密碼,並進行保存session if request.method=="POST": username=request.POST.get(username) password=request.POST.get(password) user=User.objects.filter(username=username,password=password) print(user) if user: #登錄成功 # 1,生成特殊字符串 # 2,這個字符串當成key,此key在數據庫的session表(在數據庫存中一個表名是session的表)中對應一個value # 3,在響應中,用cookies保存這個key ,(即向瀏覽器寫一個cookie,此cookies的值即是這個key特殊字符) request.session[is_login]=1 return redirect(/index/) # 如果是GET請求,就說明是用戶剛開始登錄,使用URL直接進入登錄頁面的 return render(request,login.html) @check_login def index(request): # students=Students.objects.all() ## 說明,objects.all()返回的是二維表,即一個列表,裏面包含多個元組 # return render(request,‘index.html‘,{"students_list":students}) return render(request,index.html)
View Code

3,models.py內容

技術分享圖片
from django.db import models
class User(models.Model):
    username=models.CharField(max_length=16)
    password=models.CharField(max_length=32)
View Code

4,login.html內容

技術分享圖片
<body>

<h1>歡迎登錄!</h1>
<form action="/login/" method="post">
    {% csrf_token %}
    <p>
        用戶名:
        <input type="text" name="username">
    </p>
    <p>
        密碼:
        <input type="text" name="password">
    </p>
    <p>
        <input type="submit" value="登錄">
    </p>
    <hr>
</form>
</body>
View Code

5,如果沒有登錄前,直接輸入http://localhost:8000/index/ 則會自動跳轉到login頁面

如果登錄成功了,則會跳轉到index.html頁面,以下截圖是我們事先保存到數據庫中的username和password

技術分享圖片

6,可以查看瀏覽器保存的session如下截圖,

技術分享圖片

則數據庫裏保存的則是此key對應的value,如下截圖:

技術分享圖片

說明:key 就是我們在視圖函數中的is_login 值就是1

技術分享圖片

DJANGO用戶登錄驗證完整代碼