django实现密码加密的注册(数据对象插入)-结合forms表单实现表单验证
forms表单
#_*_coding:utf-8_*_
from django import forms
class regis(forms.Form):
username = forms.CharField(label=u'用户名',min_length=4,max_length=20,error_messages={'required':u'用户名不能为空哦','min_length':u'用户名长度不能小于4位哦','max_length':u'用户名长度不能大于20位哦'})
password = forms.CharField(label=u'密码',min_length=6,max_length=256,widget=forms.PasswordInput,error_messages={'required':u'密码不能为空哦','min_length':u'密码长度不能小于6位哦'})
cpassword = forms.CharField(label=u'确认密码',min_length=6, max_length=256, widget=forms.PasswordInput(attrs={'class':'form-control','placeholder':u'与上面密码保持一致'}),error_messages={'required': u'密码不能为空哦', 'min_length': u'密码长度不能小于6位哦'})
models模型
#coding=utf-8
from django.db import models
class Userinfo(models.Model):
username = models.CharField(unique=True,max_length=20)
password = models.CharField(max_length=256)
def __unicode__(self):
return self.username
views视图
#conding=utf-8
from django.shortcuts import render,redirect
from django.http import HttpResponse,Http404
from forms import *
from models import Userinfo
from hashlib import sha1
def register(request):
if request.method == 'POST':
form = regis(request.POST)
if form.is_valid():
user = form.cleaned_data['username']
pwd = form.cleaned_data['password']
cpwd = form.cleaned_data['cpassword']
# encryption
sh1 = sha1()
sh1.update(pwd.encode('utf-8'))
pwdd = sh1.hexdigest()
if pwd != cpwd:
return redirect('/')
Userinfo.objects.get_or_create(username=user,password=pwdd)
msg='user register success!'
return render(request,'info.html',{'msg':msg})
else:
error_msg = form.errors
return render(request, 'register.html', {'form': form, 'errors': error_msg})
else:
form = regis()
return render(request, 'register.html', {'form': form})
注意视图的次序:这里的逻辑很重要
if request.method == 'POST':
form = regis(request.POST)
if form.is_valid():
使用表单进行数据提交时,不需要指定form的action,自动提交到展示页面的视图,切记注意
先判断是提交信息还是普通访问
如果不是提交信息,那么就打开注册页面同时携带表单对象,如果是post提交,就获取forms表单regis提交上来的信息
再判断表单内容是否符合格式要求,如果符合再判断两次输入的密码是否相等,如果相等则进行数据插入的操作,并且返回info.html页面告知用户注册成功
如果表单内容不符合格式要求,则将forms表单中的非空,长度限制等信息返回到注册页面
注册页面register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login</title>
<style type="text/css">
.ff{
margin-top:300px;
margin-left:500px;
}
#log{
background-color:#ccc;
margin:0px auto;
}
</style>
</head>
<body>
<div id="log">
<form method="post" class="ff">
{% csrf_token %}
<table>
<tr><td>{{form.username.label_tag}}</td><td>{{form.username}}</td></tr>
<tr style="color:red"><td>{{errors.username}}</td></tr>
<tr><td>{{form.password.label_tag}}</td><td>{{form.password}}</td></tr>
<tr style="color:red"><td>{{errors.password}}</td></tr>
<tr><td>{{form.cpassword.label_tag}}</td><td>{{form.cpassword}}</td></tr>
<tr style="color:red"><td>{{errors.cpassword}}</td></tr>
<tr><td><input type="reset" value="重置"></td><td style="text-align:right"><input type="submit" value="提交"></td></tr>
</table>
</form>
</div>
</body>
</html>
django实现密码加密的注册(数据对象插入)-结合forms表单实现表单验证的更多相关文章
- django实现密码加密的注册(数据对象插入)
在 django实现密码非加密的注册(数据对象插入)的基础上,我们对视图和注册页面进行了简单修改 视图 from django.shortcuts import render,redirect,ren ...
- django实现密码非加密的注册(数据对象插入)
数据模型 from django.db import models class userinfo(models.Model): username = models.CharField(max_leng ...
- django简单密码加密和效验
通过django自带的类库,来加密解密很方便,下面来简单介绍下: 导入包: from django.contrib.auth.hashers import make_password, check_p ...
- Django之密码加密
通过django自带的类库,来加密解密很方便,下面来简单介绍下: 导入包: from django.contrib.auth.hashers import make_password, check_p ...
- Django -MD5密码加密与登录
直接贴代码 login_reg.py from django.shortcuts import render, redirect from web.forms.login_reg import Reg ...
- django 自定义 密码加密方式 及自定义验证方式
在django1.6中,默认的加密方式是pbkdf_sha256,具体算法不表,一直以来用django的自带用户验证都十分顺手,但如果需要修改默认加密方式为md5,具体方法为: 在settings.p ...
- Oracle 常用的SQL语法和数据对象
一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……); INSE ...
- Oracle---常用SQL语法和数据对象
1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……); INSERT INTO 表名(字段名1, 字 ...
- 13flask密码加密
一,了解密码加密方式 密码具有私有性较强的特性,预测密码加密对个人隐私的保护有这非常大的作用.在用flask搭建网站时候若服务器有被攻破的风险,要是用户表中密码字段也被拿走,后果将不堪设想. 在密码保 ...
随机推荐
- spring启动加载过程源码分析
我们知道启动spring容器两常见的两种方式(其实都是加载spring容器的xml配置文件时启动的): 1.在应用程序下加载 ApplicationContext ctx = new ClassPat ...
- oracle加入not null约束
在创建表时.为列加入not null约束,形式例如以下: column_name data_type [constraint constraint_name] not null 当中,constrai ...
- js 从数组中随机获取一个值
// 获取随机数 var rand = Math.floor( Math.random() * this.peoples.length ); // 随机从数组中取出某值(不会改变原数组) var da ...
- Django中ORM介绍和字段参数
Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...
- HDU5374 Tetris (2015年多校比赛第7场)大模拟
思路: 先写好了几个函数.旋转,四种操作,推断能否够进行合并消除 题中有好几处要考虑的细节问题,如 自然下落究竟部时不进行合并的推断,而是当自然下落非法时才推断 假设消除一行,这一行上面的所以方块仅仅 ...
- python自动生成文件头
"auto add pyhton header --start autocmd BufNewFile *.py 0r ~/.vim/vim_template/vim_python_heade ...
- c++ [wrong]simple "Garbage Collector"
In fact, Ptr alone can accomplish the task mentioned below. Implementation see Ptr.h, main2.cpp. In ...
- Android 之布局
1.RelativeLayout相对布局 a).第一类:属性值为true或false android:layout_centerHrizontal 水平居中 android:layout_center ...
- ubuntu下软件安装
1. 软件源:ubuntu.cn99.com/ubuntu2. 安装vncviewer sudo apt-get install vncviewer3. aptitude sudo ap ...
- UVA 679 Dropping Balls 由小见大,分析思考 二叉树放小球,开关翻转,小球最终落下叶子编号。
A number of K balls are dropped one by one from the root of a fully binary tree structure FBT. Each ...