实战之BBS(仿博客园写一个论坛)(二)登录页面,网站首页的实现

论坛 期权论坛     
选择匿名的用户   2021-5-23 11:50   309   0
<div class="blogpost-body" id="cnblogs_post_body">
<h1>一.登录页面</h1>
<p>1.效果展示:</p>
<p><img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-162effa4015680c75bb6afded501e2b0.png"></p>
<p>2.技术点:</p>
<p>2.1验证码:验证码这个功能用了Image,ImageDraw,ImageFont,random,BytesIO模块和session</p>
<p>Image是新创建一个图片,ImageDraw相当于在这个图片上创建一个画笔,ImageFont指定字体的格式</p>
<p>random随机模块,BytesIO开辟一片字节类型的内存空间,session用于存储验证码,验证码的具体细节请看上篇博客</p>
<p>2.2登录验证:我们的注册的时候,用的是auth.create_user()方法,这种方法会让我们的密码被加密,在数据库中如下图所示:</p>
<p><img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-5371bad4395801fa008dac415aad005c.png"></p>
<p>所以说我们只能把从前端的获取的密码,经过同样的加密之后再和数据库中的数据进行比对</p>
<div class="cnblogs_code">
  <pre class="blockcode">  user&#61;auth.authenticate(request,username&#61;username,password&#61;password)</pre>
</div>
<p>如果user存在,登录成功,保持登录状态,否则返回错误信息,并对前端进行渲染</p>
<p>2.2.1登录成功:</p>
<p>首先用auth.login把user绑定,相当于session和cookie但是使用方法比这两个都简单,执行之后,不退出登录的情况下,request.user就是auth.login(request,user)里面的user</p>
<div class="cnblogs_code">
  <pre class="blockcode">auth.login(request,user)</pre>
</div>
<p>登录成功之后,给前端返回数据,首先在函数开头定义一个response_msg用于标识成功或失败,初始化:</p>
<div class="cnblogs_code">
  <pre class="blockcode"> respone_msg&#61;{<!-- --><span style="color:#800000;">&#39;</span><span style="color:#800000;">code</span><span style="color:#800000;">&#39;</span>:100,<span style="color:#800000;">&#39;</span><span style="color:#800000;">msg</span><span style="color:#800000;">&#39;</span>:<span style="color:#800000;">&#39;&#39;</span>}</pre>
</div>
<p>当登录成功的时候,code不变,给response添加一个URL:</p>
<div class="cnblogs_code">
  <pre class="blockcode">  respone_msg[<span style="color:#800000;">&#39;</span><span style="color:#800000;">url</span><span style="color:#800000;">&#39;</span>]&#61;<span style="color:#800000;">&#39;</span><span style="color:#800000;">/home</span><span style="color:#800000;">&#39;</span></pre>
</div>
<p>当登录成功的时候,跳转到home页面。当然了这行代码也需要前端的配合,前端:</p>
<div class="cnblogs_code">
  <pre class="blockcode"><span style="color:#000000;">success:function (data) {
                </span><span style="color:#0000ff;">if</span>(data.code&#61;&#61;100<span style="color:#000000;">){
                    location.href</span>&#61;<span style="color:#000000;">data.url
                }</span></pre>
</div>
<p>2.2.2登录失败:</p>
<p>登录失败,response_msg[&#39;code&#39;]变为101(或者随意一个数,和成功区别开就好),msg变为失败的信息,比如是验证码出错还是账号密码错误</p>
<p>把返回的msg数据在前端进行渲染,显示出来,效果如下:</p>
<p><img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-153e7b8ea8e8480a3c5a292b18b00c93.png"></p>
<p>3.流程图:</p>
<p><img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-7c8ebb9343ba281ffc0756a46e5e0bf4.png"></p>
<p> </p>
<p> 4.具体代码:</p>
<p>后端代码:</p>
<div class="cnblogs_code">
  <img alt="" class="code_img_closed" id="code_img_closed_a05e75dd-1d86-4ed4-9270-f629a069c60b" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-8f900a89c6347c561fdf2122f13be562.gif">
  <img alt="" class="code_img_opened" id="code_img_opened_a05e75dd-1d86-4ed4-9270-f629a069c60b" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-961ddebeb323a10fe0623af514929fc1.gif">
  <div class="cnblogs_code_hide" id="cnblogs_code_open_a05e75dd-1d86-4ed4-9270-f629a069c60b">
   <pre class="blockcode"><span style="color:#0000ff;">from</span> django.shortcuts <span style="color:#0000ff;">import</span><span style="color:#000000;"> render,HttpResponse,redirect
</span><span style="color:#0000ff;">from</span> app01 <span style="color:#0000ff;">import</span><span style="color:#000000;"> myforms
</span><span style="color:#0000ff;">from</span> app01 <span style="color:#0000ff;">import</span><span style="color:#000000;"> models
</span><span style="color:#0000ff;">from</span> django.http <span style="color:#0000ff;">import</span><span style="color:#000000;"> JsonResponse
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Create your views here.</span>
<span style="color:#0000ff;">from</span> PIL <span style="color:#0000ff;">import</span><span style="color:#000000;"> Image,ImageDraw,ImageFont
</span><span style="color:#0000ff;">from</span> io <span style="
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP