运用Django、MySQL、HTML、JS、Ajax模拟开发博客系统(4)

接着我们来做一下登陆功能

我们首先在templates创建一个login.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()

  • 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中配置一下路径

登录成功将用户信息放入session

  • 在我们登录成功之后,我们需要把用户信息显示在页面上,并且在跳转到别的页面的时候,这个用户依然是已经登录的状态浏览器可以识别,这就需要session 会话作用域
  1. installed_apps

    2.中间件(帮我们启用session)

    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能力

         session本身就是一个dict字段

         session在存数据时数据必须支持序列化json)

我们首先需要把app的session在数据库中创建一个表

  • 使用shell命令 migrate sessions

    1、再次启动manage.py

        2、输入 migrate sessions 命令

 这时我们会发现数据中创建了一个session的表用来储存session 的创建时间和到期时间(默认时间为两周)

接着我们修改views.py中的代码让用户登录成攻之后把它保存在session中以便于以后任何函数都可以在session中获取到信息

登录成功后,我们关闭浏览器 ,再次打开浏览器,在地址栏输入http://127.0.0.1:8000/welcome会发现内容不变

未完待续。。。

猜你喜欢

转载自my.oschina.net/u/3764483/blog/1808884