Python打造在线教学平台学习——学习周报3

版权声明:攻城狮的博文 https://blog.csdn.net/weixin_40824913/article/details/84424032

业务逻辑开发

		                                 ——————  学习周报 2018.11.25


本周计划:

  • 完成课程第6章的学习
  • 复习第4,5章知识
  • 复习HTML知识

完成情况:

  • 第6章
  • 1.用户登录
  • 2.form实现登录
  • 3.session和cookie自动登录机制
  • 4.用户注册


展示:

1、用户登录

  • 错误1: login() 1个argment,因为给了2个
    在这里插入图片描述原因:在view.py中定义的函数名是login,在其中用函数时也用到了login(),两个login()的参数个数不一样
    解决: 更改第一个login的函数名
    在这里插入图片描述

  • 错误2: 403
    在这里插入图片描述原因:Django的安全机制,防止跨域提交攻击。
    解决:login.html 的form之前加{% csrf_token %}

  • 并级:
    from django.db.models import Q
    用法:Q( )

  • 在登录时,如果用户名或者密码输入错误时,给出一个提示:
    在这里插入图片描述
    实现简单:传一个参数即可 在我的代码中传 msg

  • 基于类来实现view.py:这样有很多好处。

  • 使用类来实现登录

from django.views.generic.base import View

class LoginView(View):
	def get(self, request):
		return render(request, "login.html", {})
	def post(self, request):
		user_name = request.POST.get("username", "")
		pass_word = request.POST.get("password", "")
		user = authenticate(username=user_name, password=pass_word)
		if user is not None:
			login(request, user)
			return render(request, "index.html")
		else:
			return render(request, "login.html", {"msg": "用户名或密码错误!"})

2、用form实现登录

  • 通过form来验证参数是否正确,比如说最大长度、是否为空。他是自动实现,这样为我们减省了很多代码。
  • user中建立forms.py文件
from django import forms

class LoginForm(forms.Form):
    username = forms.CharField(required=True)
    password = forms.CharField(required=True, min_length=5)
  • 在登录时如果有错误,将错误在页面显示出来:
    在login.html中进行更改:
<div class="fl form-box">
<h2>帐号登录</h2>
                <form action="/login/" method="post" autocomplete="off">
                    <div class="form-group marb20 {% if login_form.errors.username %}earrorput{% endif %}">
                        <label>用&nbsp;户&nbsp;名</label>
                        <input name="username" id="account_l" type="text" placeholder="手机号/邮箱" />
                    </div>
                    <div class="form-group marb8 {% if login_form.errors.username %}earrorput{% endif %}">
                        <label>密&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;码</label>
                        <input name="password" id="password_l" type="password" placeholder="请输入您的密码" />
                    </div>
                    <div class="error btns login-form-tips" id="jsLoginTips">{% for key,error in login_form.errors.items %}{{ key }}:{{ error }}{% endfor %}{{ msg }}</div>
                     <div class="auto-box marb38">

                        <a class="fr" href="forgetpwd.html">忘记密码?</a>
                     </div>
                     <input class="btn btn-green" id="jsLoginBtn" type="submit" value="立即登录 > " />
                {% csrf_token %}
                </form>
                <p class="form-p">没有慕学在线网帐号?<a href="register.html">[立即注册]</a></p>
            </div>

结果:
测试例子:当不输入用户名和密码时:
在这里插入图片描述

3.session和cookie自动登录机制

  • 理解cookie和sessuon的知识链接:知识点链接
  • 无状态请求:
    在这里插入图片描述
  • 有状态请求:
    在这里插入图片描述
  • cookies:有安全隐患,不能把用户所有信息都存在本地,这样很不安全,容易被别人窃取,知道用户名和密码,是本地的一种行为。基于这种考虑,就产生了session机制。
  • session:可对用户信息进行加密,加密后的用户信息是有保存时间限制的。
  • Django利用cokies和sessiond机制,实现了自动登录。
  • Django中实现sessiond的机制(默认是配置好的):
    在这里插入图片描述
    如果注释掉,自动登录将失效。

4.用户注册

  • 将注册页面文件register.html文件拷入templates
  • 编写view:
class RegisterView(View):
    def get(self, request):
        return render(request, "register.html", {})
  • 配置url:
from users.views import RegisterView

 url('^register/$', RegisterView.as_view(), name="register")
  • 配置register.html,实现首页点“注册”时向注册页面的跳转。
 <a style="color:white" class="fr registerbtn" href="{% url 'register' %}">注册</a>
  • 结果:
    在这里插入图片描述

专门做验证码的开发库: django captcha

+  地址:[链接](https://github.com/mbi/django-simple-captcha)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181125121605233.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MDgyNDkxMw==,size_16,color_FFFFFF,t_70)
#### 安装教程:[链接](https://django-simple-captcha.readthedocs.io/en/latest/usage.html#installation)

在这里插入图片描述
1、pip install django-simple-captcha
在这里插入图片描述2、加入url: url(r'^captcha/', include('captcha.urls')),
3、makemigrations:
在这里插入图片描述在这里插入图片描述
4、form表单中:

from captcha.fields import CaptchaField

class RegisterForm(forms.Form):
    email = forms.EmailField(required=True)
    password = forms.CharField(required=True, min_length=5)
    captcha = CaptchaField(error_messages={"invalid": u"验证码错误"})

5、验证码实现:
在这里插入图片描述
在后台数据库也会相应产生验证码:
在这里插入图片描述实现时会自动进行比对查询。

  • 生成随机验证码:(email_send.py中)
from random import Random

def random_str(randomlength=8):
    str = ''
    chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'
    length = len(chars) - 1
    random = Random()
    for i in range(randomlength):
        str+=chars[random.randint(0, length)]
    return str

6.邮箱注册成功:
账户:[email protected]
密码: admin123
后台数据库成功记录该账户信息:
在这里插入图片描述
7.注册时检测用户是否已经注册:

  • 如果已经注册,显示:“用户已经存在!”
    在这里插入图片描述

下周任务:

下周考试多多,任务安装较少。

扫描二维码关注公众号,回复: 4711165 查看本文章
  • 完成第6章剩余的——密码找回
  • 完成第7章—— 课程机构功能实现(7-1 ------- 7-6)
    • 模块继承
    • 课程机构列表页数据展示
    • 列表分页功能
    • 列表筛选功能

猜你喜欢

转载自blog.csdn.net/weixin_40824913/article/details/84424032
今日推荐