DJANGO用戶登陸驗證完整代碼

 

1,urls.py內容:html

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內容數據庫

說明:django

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

       以下:cookie

 

 

# -*- 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內容session

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內容ide

<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頁面post

       若是登陸成功了,則會跳轉到index.html頁面:ui

  頁面顯示以下:

 

註明:

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

 註明:

 6,能夠查看瀏覽器保存的session以下截圖,

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

 

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

 

相關文章
相關標籤/搜索