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表单实现表单验证的更多相关文章

  1. django实现密码加密的注册(数据对象插入)

    在 django实现密码非加密的注册(数据对象插入)的基础上,我们对视图和注册页面进行了简单修改 视图 from django.shortcuts import render,redirect,ren ...

  2. django实现密码非加密的注册(数据对象插入)

    数据模型 from django.db import models class userinfo(models.Model): username = models.CharField(max_leng ...

  3. django简单密码加密和效验

    通过django自带的类库,来加密解密很方便,下面来简单介绍下: 导入包: from django.contrib.auth.hashers import make_password, check_p ...

  4. Django之密码加密

    通过django自带的类库,来加密解密很方便,下面来简单介绍下: 导入包: from django.contrib.auth.hashers import make_password, check_p ...

  5. Django -MD5密码加密与登录

    直接贴代码 login_reg.py from django.shortcuts import render, redirect from web.forms.login_reg import Reg ...

  6. django 自定义 密码加密方式 及自定义验证方式

    在django1.6中,默认的加密方式是pbkdf_sha256,具体算法不表,一直以来用django的自带用户验证都十分顺手,但如果需要修改默认加密方式为md5,具体方法为: 在settings.p ...

  7. Oracle 常用的SQL语法和数据对象

    一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……);  INSE ...

  8. Oracle---常用SQL语法和数据对象

    1.INSERT  (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……); INSERT INTO 表名(字段名1, 字 ...

  9. 13flask密码加密

    一,了解密码加密方式 密码具有私有性较强的特性,预测密码加密对个人隐私的保护有这非常大的作用.在用flask搭建网站时候若服务器有被攻破的风险,要是用户表中密码字段也被拿走,后果将不堪设想. 在密码保 ...

随机推荐

  1. poj 3592 Instantaneous Transference 【SCC +缩点 + SPFA】

    Instantaneous Transference Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 6204   Accep ...

  2. linux下使用tc(Traffic Control) 流量控制命令模拟网络延迟和丢包

    目录 TC案例 TC常用命令 TC安装 TC原理介绍 TC规则 TC操作原理 TC命名规则 TC单位 TC命令 TC案例 如何使用tc模拟网络延迟和丢包 修改网络延时:  sudo tc qdisc  ...

  3. VC驿站黑客编程(关机,重新启动,注销)

    此程序在VS2013下编译通过,假设换到编译器,大家能够稍作改动使用 #include<Windows.h> #include<tchar.h> #include"r ...

  4. PHP输出xls文件

    PHP输出xls文件 标签: phpexcelxmlcsvborderheader 2008-11-17 09:33 2611人阅读 评论(0) 收藏 举报  分类: WebDev(9)  版权声明: ...

  5. 微信小程序下拉按钮动画

    有些时候要求下拉按钮需要动画效果,但又不需要引入插件. 这时需要手动写一个动画. 主要思路: 动态切换class 默认与动画转向的样式编写 上图是默认给出的按钮向下的样式, 上图是动画转向后的样式 上 ...

  6. sql server 数据库基础知识(二)

    CASE函数用法1:单值判断,相当于switch caseCASE expression WHEN value1 THEN returnvalue1 WHEN value2 THEN returnva ...

  7. asp.net中TextBox只能输入数字的最简洁的两种方法

    如下TextBox <asp:textboxonkeypress="isnum()"id="TextBox1"runat="server&quo ...

  8. SVD分解的c++代码(Eigen 库)

    使用Eigen 库:进行svd分解,形如 A = U * S * VT. JacobiSVD<MatrixXd> svd(J, ComputeThinU | ComputeThinV); ...

  9. 回顾下WinMain

    我们在学习标准C++的时候,都知道每个应用程序运行时都会先进入入口点函数main,而当从main函数跳出时程序就结束了.在Windows编程里面,也是一样的,只是我们的入口点函数不叫main,叫Win ...

  10. 第1周---python网络爬虫规则

    第一节:requests库入门 第二节:网络爬虫的"盗亦有道" 第三节:requests库的网络爬虫实例