• session会话


    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.显示效果

    登陆成功

    登出

  • 相关阅读:
    团队作业第四次—项目系统设计与数据库设计
    团队Github实战训练
    第三次团队作业(需求分析)
    团队作业——UML设计
    项目介绍
    Happy Tree Friends——团队展示
    Alpha冲刺 (1/9)
    团队作业第四次—项目系统设计与数据库设计
    团队Github实战训练
    团队作业——需求分析
  • 原文地址:https://www.cnblogs.com/endmoon/p/9744750.html
Copyright © 2020-2023  润新知