運用Django、MySQL、HTML、JS、Ajax模擬開發博客系統(4)

接着咱們來作一下登錄功能javascript

咱們首先在templates建立一個login.html,用來顯示登錄的頁面html

  • <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script type="text/javascript" src="/static/js/jquery-3.3.1.js"></script>
        <script>
            $(function (){
                $("input[name='username']").blur(function () {
                   //alert("")
                    uname=$("input [name='username']").val()
                    CSRF=$("input[name='csrfmiddlewaretoken']").val()
                    $.ajax({
                        url:'/BlogUser/getUser',
                        data:{'uname':uname,'csrfmiddlewaretoken':CSRF},
                        type:'POST',
    
    
                    });
                });
            });
        </script>
    </head>
    <body>
    <h1>歡迎登陸</h1>
    <form action="/BlogUser/login" method="post">
        {% csrf_token %}
        用戶名:<input type="text" name="username" value="{{ username }}">
        <br>
        密  碼:<input type="password" name="pwd">
        <label style="color: red">{{ error1 }}</label><br>
    
        <input type="submit" value="登陸">
        </form>
    </body>
    </html>

接着在views.py中建立登陸的函數login()java

  • def login(request):
        if request.method=='GET':
            return render(request,'login.html')
        else:
           username=request.POST.get('username')
           pwd=request.POST.get('pwd')
           blogUserSet=BlogUser.objects.filter(username=username,password=pwd)
           if len(blogUserSet)==1:
               return redirect(reverse('user:welcome',args=[blogUserSet.first().id]))
           else:
               return render(request,'login.html',{'error1':'密碼錯誤'})

在blog\urls.py中導入welcome,在BlogUser.vews.py中配置一下路徑jquery

登陸成功將用戶信息放入sessionajax

  • 在咱們登陸成功以後,咱們須要把用戶信息顯示在頁面上,而且在跳轉到別的頁面的時候,這個用戶依然是已經登陸的狀態瀏覽器能夠識別,這就須要session 會話做用域
  1. installed_apps

    2.中間件(幫咱們啓用session)shell

    3.設置存儲形式(儲存在設置數據庫中)數據庫

session只能儲存json也就是字典類型的數據
django session的設計原理:
      a、若是用戶是第一次請求(就看客戶端ie是否保存了sessionId的cookie)
                建立session model 
                生成一個key sessionId 隨機的一個字符串(uuid使id永遠也不會重複)
                保存到你session_engine指定位置
                保存到cookie中,在客戶的瀏覽器中
       b、若是第二次以上的請求,客戶端ie都會自動提交cookie到django中,django中利用你配置                         的SessionMiddleware中間件激活session利用cookie中的sessionID到session_engine指                           定位置讀取session model,並設置到request的session屬性上
            正是用爲這樣才能在view裏面經過request.session使用session能力django

         session自己就是一個dict字段json

         session在存數據時數據必須支持序列化json)瀏覽器

咱們首先須要把app的session在數據庫中建立一個表

  • 使用shell命令 migrate sessions

    一、再次啓動manage.py

        二、輸入 migrate sessions 命令

 這時咱們會發現數據中建立了一個session的表用來儲存session 的建立時間和到期時間(默認時間爲兩週)

接着咱們修改views.py中的代碼讓用戶登陸成功以後把它保存在session中以便於之後任何函數均可以在session中獲取到信息

登陸成功後,咱們關閉瀏覽器 ,再次打開瀏覽器,在地址欄輸入http://127.0.0.1:8000/welcome會發現內容不變

cookie和session共同保存的,cookie是保存在瀏覽器裏,session保存在數據庫中

接下來咱們實現不登陸的話看不到welcome這個頁面,若是不登陸,直接訪問welcome頁面時就會自動跳轉到登陸頁面,而且登陸成功以後能夠實現退出功能(使session失效)而且退出後又回到登陸頁面

咱們須要在views.py中添加退出函數

而且修改一下welcome.html,在裏面作一個判斷

同時在BlogUser\urls.py下配置一下路徑

接着咱們運行程序來到登陸頁面 登陸數據庫已有的數據

咱們點擊退出,又會回到登陸頁面

相關文章
相關標籤/搜索