1. 程式人生 > >session會話

session會話

support content message 字符集 views sage 用戶 spa endif

session會話

1.views.py文件使用session會話

from django.shortcuts import render
from django.http import HttpResponse
from django.shortcuts import redirect
# Create your views here.
from app_login.models import User
import forms   #導入forms表單

def index(request):
    return render(request, 'login/index.html')


def login(request):
    if request.session.get('is_login'):     #不允許重復登陸
        return redirect("/index/")
    if request.method=="POST":   #提交表單後,滿足請求為post就執行下面的內容
        message = '所有字段都必須填寫'
        login_form=forms.UserForm(request.POST)    #獲取每個input標簽
        # username = request.POST.get('username')       #獲取表單中輸入的用戶名和密碼
        # password = request.POST.get('password')
        # print(username,password)
        # if username and password :    #用戶名和密碼都不為空
        #     username=username.strip()  #清除用戶名前後的空格
        if login_form.is_valid():     #這個就是用於驗證輸入表單內容的合法性
            username=login_form.cleaned_data['username']      #cleaned_data會將input標簽中的變量和值作為以字典的一個元素形式表現出來
            password=login_form.cleaned_data['password']
        # user = User(username, password)         #添加到User表中
        # user.save()                             #存儲到數據庫中
            #查詢數據庫中是否存在該用戶名和密碼
            t_username=User.objects.filter(name=username)
            print(t_username)
            t_password=User.objects.filter(password=password)
            if t_username and t_password:
                request.session['is_login']=True     #寫入用戶狀態和數據
                # request.session['user_id']=t_username.id
                request.session['user_name']=username
                return redirect('/index/')
            elif not t_username:
                # return HttpResponse('用戶名不存在')
                message='用戶名不存在'
            elif not t_password:
                # return HttpResponse('密碼不存在')
                message='密碼不存在'
        return render(request,'login/login.html',{"message":message,"login_form":login_form})   #將message信息通過模板傳遞到網頁
    login_form=forms.UserForm()         #保留輸入的錯誤字段
    return render(request,'login/login.html',{"login_form":login_form})



def register(request):
    return render(request,'login/register.html')

def logout(request):
    if not request.session.get('is_login'):   #如果登陸狀態為未登陸
        return redirect('/index/')              #就跳轉至主頁(也就是依然停留在當前頁面)
    request.session.flush()             #清除session記錄
    return redirect('/index/')

2.修改base.html文件

{% load staticfiles %}   <!--加載靜態方法-->
<!DOCTYPE html>
<html lang="zh-CN">
  <head>
      <!--設置字符集、瀏覽器優先渲染模式以及可視區域設置等,不用修改,按模板默認的就行-->
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3個meta標簽*必須*放在最前面,任何其他內容都*必須*跟隨其後! -->
    <title>{% block title %}base{% endblock %}</title>  <!--通過模板設置title動態加載-->

    <!-- Bootstrap  將放入static下對應的內容加載進來,導入bootstrap樣式文件,通過模板設置動態加載-->
    <link href="{% static '/bootstrap-3.3.7-dist/css/bootstrap.css' %}" rel="stylesheet">
    {%  block css %}{% endblock %} <!--通過模板設置css動態加載-->
    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]><!--用於支持ie9以下的版本支持h5,按alt+enter點擊下載即可-->
      <script src="https://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"></script>
      <script src="https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
    <![endif]-->
      <!--  導入jquery插件,通過模板設置動態加載 -->
    <script src="{% static 'js/jquery-3.3.1.js' %}"></script>
    <!--  導入bootstrap的js文件,通過模板設置動態加載-->
    <script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script>
  </head>
  <body>
    <nav class="navbar navbar-default" role="navigation">
    <div class="container-fluid">
        <div class="navbar-header">
            <a class="navbar-brand" href="#">主頁</a>
        </div>
        <ul class="nav navbar-nav navbar-right">
            {% if request.session.is_login %}   <!--views.py文件中登陸成功後賦值未True,這裏拿到True後就進入判斷語句-->
                <li><a href="#">當前在線:{{ request.session.user_name }}</a></li>   <!--這裏顯示的是views文件中輸入的username,也就是當前登陸成功的用戶名-->
                <li><a href="/logout/">登出</a></li>      <!--導航條點擊登出跳轉至登出頁面-->
            {% else %}   <!--如果登陸成功就不會執行下面的代碼,避免出現登陸成功後依然顯示註冊登陸的情況,另外登出或未登陸時訪問網頁才會出現下面的內容-->
            <li><a href="#"><span class="glyphicon glyphicon-user"></span> 註冊</a></li>      <!--導航條點擊註冊跳轉至註冊頁面-->
            <li><a href="/login/"><span class="glyphicon glyphicon-log-in"></span> 登錄</a></li>   <!--導航條點擊登陸跳轉至登陸頁面-->
            {% endif %}
        </ul>
    </div>
    </nav>
  {% block content %}{% endblock %}  <!--為具體主體內容留下接口-->
  </body>
</html>

3.修改主頁頁面index.html

{% extends 'base.html' %}                  <!--加載base模板內容-->
{%  block title %}主頁{% endblock %}      <!--這裏不使用base模板的,自定義title-->

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>主頁</title>
</head>
<body>
{%  block content %}
    {%  if request.session.is_login %}   <!--這裏判斷登陸成功,就進入歡迎頁面-->
    <h1>你好,{{ request.session.user_name }}!歡迎回來</h1>
    {% else %}          <!--未登陸就顯示以下公開內容的頁面-->
    <h1>你尚未登陸,只能訪問公開內容!</h1>
    {% endif %}         <!--結束循環-->
{% endblock %}
</body>
</html>

4.顯示效果

登陸成功

技術分享圖片

登出

技術分享圖片

session會話