运用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下配置一下路径

接着咱们运行程序来到登陆页面 登陆数据库已有的数据

咱们点击退出,又会回到登陆页面

相关文章
相关标签/搜索