Django——自制登录系统(cookie)
来源:互联网 发布:迅龙数据恢复软件注册 编辑:程序博客网 时间:2024/06/10 01:14
预计实现网站用户注册、登录的功能
Django app中的url如下
urlpatterns = [ url(r'^login/$', views.login, name='login'), url(r'^register/$', views.register, name='register'), url(r'^logout/$', views.logout, name='logout')]
一、Model 用户模型
class User(models.Model): user_name=models.CharField(max_length=50) user_email=models.CharField(max_length=100) user_pass_hash=models.CharField(max_length=100)
二、表单
在form类中的clean_filename方法可以进行数据的验证,例如下面的 def clean_user_eamil():
排除两次密码不一致
也可以提前检查登录用户的信息是否存在
class LoginForm(forms.Form): user_email = forms.CharField(label="邮箱",max_length=100) user_password = forms.CharField(label="密码",widget=forms.PasswordInput())class RegisterForm(forms.Form): user_name=forms.CharField(label="用户名", max_length=50) user_email = forms.EmailField(label="邮箱", max_length=100,error_messages={'required':u'请填入邮箱'}) user_password = forms.CharField(label="密码", widget=forms.PasswordInput()) user_password2 = forms.CharField(label="重复密码", widget=forms.PasswordInput()) def clean_user_password2(self): cleaned_data = super(RegisterForm, self).clean() user_password=cleaned_data['user_password'] user_password2= cleaned_data['user_password2'] if user_password2 != user_password: raise forms.ValidationError('两次密码不一致')
三、视图
注册register
1. 获取表单POST的值包含注册的email、username、password2. 在数据库创建相应用户User.object.create()3. 密码要避免明文存储
登录login
1.获取表单POST的值包含注册的email、password2.与数据库的信息比较,验证password3.创建cookie,使用django的set_cookie4.其他页面可以通过浏览器请求的cookie,验证cookie,解析用户,判断登录状态
下面是自己实现的cookie2user,和setcookie方法
def setcookie(response, user_id, user_email, user_pass_hash, secret_key): s = '%s-%s-%s' % (user_email, user_pass_hash, secret_key) s = hashlib.sha1(s.encode()).hexdigest() L = ['UID:' + str(user_id), s] cookie = '-'.join(L) response.set_cookie('cookie_name', cookie, 60) return response
def cookie2user(cookie): try: uid = cookie.split('-')[0].split(':')[1] u = User.objects.filter(id=int(uid))[0] s = '%s-%s-%s' % (u.user_email, u.user_pass_hash, SECRET_KEY) s = hashlib.sha1(s.encode()).hexdigest() if cookie.split('-')[1] == s: user = u else: user = None except Exception: user = None return user
注销logout
删除cookie response.delete_cookie('cookiename')
即可
login_required装饰器
使用了这个装饰器的view函数,如果处于登录状态,可以从kw[‘user’]获取到user
def loginrequired(func): def decofunc(request, **kw): cookie = request.COOKIES.get('algs', '') user = cookie2user(cookie) if user is not None: return func(request, user=user) else: return HttpResponseRedirect(reverse('authin:login')) return decofunc
阅读全文
0 0
- Django——自制登录系统(cookie)
- django 快速实现完整登录系统(cookie)
- 04.Django实现完整登录系统的两种方法(cookie and session)
- 基于Cookie的单点登录(SSO)系统介绍
- 到处Can—加密和解密cookie(登录操作)
- 30天自制操作系统——用U盘启动自制系统
- 30天自制操作系统——用U盘启动自制系统
- 30天自制操作系统——用U盘启动自制系统
- 30天自制操作系统——用U盘启动自制系统
- 30天自制操作系统——用U盘启动自制系统
- Django——登录后回到请求登录的页面
- Cookie应用——自动登录
- SSO单点登录学习总结(2)——基于Cookie+fliter单点登录实例
- 应用程序调试(四)————自制系统调用、编写进程查看器
- django 快速实现完整登录系统
- 使用django-userena搭建用户登录系统
- Django 博客系统------登录注册功能
- Redis、Cookie、Session单点登录系统设计
- input验证,ie9光标左右移动问题
- oracle数据库索引
- android笔记201710
- KEIL编译器区分RW-data和ZI-data
- 升级由swift2.3->swift4.0
- Django——自制登录系统(cookie)
- POJ
- 51nod 1058 N的阶乘的长度
- ios-Swift中KVC出现的问题
- 侧拉布局
- UVALive 3263 二维几何基础
- http事务机制剖析--https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/
- 【c基础练习】c语言实现链表
- weblogic 解决线程阻塞