版权声明:攻城狮的博文 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>用 户 名</label>
<input name="username" id="account_l" type="text" placeholder="手机号/邮箱" />
</div>
<div class="form-group marb8 {% if login_form.errors.username %}earrorput{% endif %}">
<label>密 码</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)
- 模块继承
- 课程机构列表页数据展示
- 列表分页功能
- 列表筛选功能