mxonline实战4,用户登陆页面2和用户注册1
一. 基于类来定义view.py
diango中使用基于类来定义views的功能,其实更加方便,因为这样可继承一些定义好的基类,来减少我们的代码量
1. 使用基于类的方法,来重新定义user/views.py中的my_login函数功能
1.1首先引入基类中的View类,from django.views.generic.base import View,这个类中包含用户请求的get, post等方法
我们只需重新定义它get, post方法即可
1.2. 修改users/urls.py
2. 后台登陆表单的验证功能
2.1首先新建一个python文件 users/forms.py
2.2,在users/views.py中使用此验证功能
首先引入LoginForm,然后创建一个它的实例对象:login_form
调用对象的is_valid()函数来对表单进行验证,验证标准就是我们在users/form.py定义的
添加判断语句,使验证合法但用户名或密码真是错误的时候才显示用户名或密码错误;验证不成功时,将login_form返回前端
2.3 将验证错误信息显示在前端页面中
在if login_form.is_valid()这行代码打上断点,然后进行debug运行mxonline时,在前段页面上故意写错登陆信息,可以发现一个login_form的错误提示信息,它有一个_errors的变量,类型为字典,包含了出错了信息。
所以只需要把这个_errors字典里的信息显示在前端页面就行了,使用的时候可去掉前面的"_"
在login.html的大概71行用户名样式代码上,添加如下代码,其中errorput表示当用户名有错误时,用户名的输入框外边缘会标红
同样的,在大概76行密码样式处也添加类似代码
在81行左右添加如下代码,让出错信息显示在页面上
cookie和session
一般用户请求服务器端信息,都是无状态请求。用户端请求数据,然后服务端返回数据。下次请求相同数据时重复这样的操作
cookie
有些商业网站想记录用户信息,从而优化用户体验,就需要用到有状态请求,比如淘宝想记录用户的商品浏览记录
用户A想访问淘宝中的手机信息的过程如下:
1)用户向服务器请求手机信息,
2)服务器接收到请求后,首先会判断时候有用户A的信息,没有的话就给用户A分配一个ID=1,并且随手机信息一起返回用户A
3)用户A保存此ID=1到Cookie中
4)用户B在请求时,用上ID=1的cookie信息,就能访问到用户A的相关信息
session
但是cookie信息是存在本地的,有一定的安全隐患,为了解决安全问题,就引入了session
1. django中使用login函数,根据用户名和密码生成一个session id的字符串,保存在数据库django_session表中
2. 当用户登陆的时候,就可以在django_session表中看到相应的session信息,用户退出时,session信息自动清空
其中session_key发到浏览器叫做session id
3. session信息怎么转为用户名和密码的呢,
在django中的settings.py中有一个叫django.contrib.sessions的app。这个app会拦截我们每次的request请求,在request中找到session id,然后在数据表中进行查询,然后通过session key去找到session data,此时直接为我们取出user
在服务器返回浏览器的response中也会直接加上session id
二. 用户注册1
1. users/views.py中添加用户注册的view
2. 配置对应URL
mxonline/urls.py中修改为如下
users/urls.py中修改为如下,因为login和register都是users应用下的视图,所以主urls.py可以不变,只在users/urls.py中修改即可
3. 在index.html中主页添加url模板,在45行左右修改为
其中users为mxonline/urls.py中命名空间的名字,register为users/urls.py中URL模式的名称
4. 修改register.html中css的文件位置
方法1,把文件中的..全部修改为static
方法2,使用static模板,这样的好处是只修改settings.py中的STATIC_URL变量值即可修改所有前端中css的位置
1)在registe.html中第三行添加 {% load staticfiles %}
2) 将原格式href="../css/reset.css" 修改为 href="{% static 'css/reset.css' %}"
努力生活,融于自然