DJANGO用戶登錄驗證完整代碼


 

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'  # 這個session是用於后面訪問每個頁面(即調用每個視圖函數時要用到,即判斷是否已經登錄,用此判斷)
            # request.session['username']=username  # 這個要存儲的session是用於后面,每個頁面上要顯示出來,登錄狀態的用戶名用。
            # 說明:如果需要在頁面上顯示出來的用戶信息太多(有時還有積分,姓名,年齡等信息),所以我們可以只用session保存user_id
            request.session['user_id']=user[0].id
            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})
    # username1=request.session.get('username')
    user_id1=request.session.get('user_id')
    # 使用user_id去數據庫中找到對應的user信息
    userobj=User.objects.filter(id=user_id1)
    print userobj
    if userobj:
        return render(request,'index.html',{"user":userobj[0]})
    else:
        return render(request,'index.html',{'user','匿名用戶'})
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,這是index.html的內容

  <body>
    <!-- {%for student in students_list%}
      {{student.sname}}--{{student.sage}}
      <br>
    {%endfor%} -->
    <h1>這是一個index頁面</h1>
    <p>歡迎:{{user.username}}--{{user.password}}</p>

  </body>
View Code

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

       如果登錄成功了,則會跳轉到index.html頁面:

  頁面顯示如下:

 

注明:

,以下截圖是我們事先保存到數據庫中的username和password

 注明:

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

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

 

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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM