1 form.py中写register的的form组件

from django import  forms
class Register(forms.Form): # 注册的form username = forms.CharField(
max_length=32,min_length=6,
label='姓名',
error_messages={
'required':'用户名不能为空',
'invalid':'用户名输入格式有误',
'min_length':'用户名最小长度为6位',
'max_length':'用户名最小长度为6位',
},
widget=forms.TextInput(
attrs={
'placeholder':'请输入用户名'
}
)) password= forms.CharField(
max_length=32,
min_length=6,
label='密码',
error_messages={
'required':'密码不能为空',
'invalid':'密码输入格式有误',
'min_length':'密码最短6位',
'max_lenth':'密码不能超过32位', },
widget=forms.PasswordInput(
attrs={
'placeholder':'请输入密码'
}
), ) repassword = forms.CharField(
max_length=32,
min_length=6,
label='确认密码',
error_messages={
'required': '确定密码不能为空',
'invalid': '确定密码格式错误',
'min_length': '确定密码最短6位',
'max_length': '确定密码最长32位',
},
widget=forms.widgets.PasswordInput(attrs={"placeholder": "请输入确认密码"} ), ) telephone = forms.CharField(
max_length=11,
label="手机号码",
required=False,
error_messages={
},
validators=[RegexValidator(r'^[0-9]{11}$', '请输入11位手机号码'),
RegexValidator(r'^(13|14|15|17)[0-9]{9}$', '手机号码必须以13/14/15/17开头')],
widget=forms.widgets.TextInput(attrs={"placeholder": "请输入手机号码"}),
) email = forms.EmailField(
label='邮箱',
error_messages={
'invalid': '邮箱格式错误',
},
required=False,
widget=forms.widgets.TextInput(attrs={"placeholder": "请输入邮箱"}),
) def clean_username(self):
username = self.cleaned_data.get('username')
ret = models.UserInfo.objects.filter(username=username).exists()
print(ret)
if ret:
raise ValidationError('该用户名已存在')
else:
return username def clean_repassword(self):
password = self.cleaned_data.get('password')
repassword = self.cleaned_data.get('repassword')
if password != repassword:
raise ValidationError('密码不一致')
else:
return repassword def clean_phone(self):
value = self.cleaned_data.get("phone")
if models.UserInfo.objects.filter(phone=value).exists():
raise ValidationError("该手机号码已经注册")
else:
return value def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
for field in iter(self.fields): self.fields[field].widget.attrs.update({
'class': 'form-control'
})

2 写注册的视图函数

from web import form
def register(request):
"""
用户的注册
:param request:
:return:
"""
if request.method =='GET':
form_obj = form.Register()
return render(request,'register.html',{'form_obj':form_obj})
else:
form_obj = form.Register(request.POST) if form_obj.is_valid():
data = form_obj.cleaned_data
data.pop('repassword')
roles = data.pop('roles')
# roles = request.POST.getlist()
user_obj = models.UserInfo.objects.create_user(**data)
user_obj.roles.set(roles) return redirect('login')
else:
return render(request,'register.html',{'form_obj':form_obj})

3 登录函数:

from PIL import Image,ImageDraw,ImageFont
from io import BytesIO # 随机数
def get_random_color():
return (random.randint(0, 255),
random.randint(0, 255),
random.randint(0, 255)) # 验证码
def get_valid_img(request):
# 图片对象
width = 190
height = 35
img_obj = Image.new('RGB', (width, height), get_random_color())
# 画笔对象
draw_obj = ImageDraw.Draw(img_obj)
# 获取字体
font_path = os.path.join(settings.BASE_DIR, "web/static/font/font.ttf")
# 字体对象
font_obj = ImageFont.truetype(font_path, 32)
# 获取用户输入验证码的内容
sum_str = ''
for i in range(4):
a = random.choice(
[str(random.randint(0, 9)),
chr(random.randint(97, 122)),
chr(random.randint(65, 90))])
sum_str += a
# 通过画笔对象,添加文字
draw_obj.text((40, 0), sum_str, fill=get_random_color(), font=font_obj) # 添加噪线
for i in range(3):
# 两点一线
x1 = random.randint(0, width)
x2 = random.randint(0, width)
y1 = random.randint(0, height)
y2 = random.randint(0, height)
draw_obj.line((x1, y1, x2, y2), fill=get_random_color())
# 添加噪点
for i in range(3):
draw_obj.point([random.randint(0, width), random.randint(0, height)], fill=get_random_color())
x = random.randint(0, width)
y = random.randint(0, height)
draw_obj.arc((x, y, x + 8, y + 8), 0, random.randint(0, 360), fill=get_random_color())
# from io import BytesIO
# 操作内存的手柄
f = BytesIO()
img_obj.save(f, 'png')
data = f.getvalue() # 将验证码存在各用户自己的session中
request.session["valid_str"] = sum_str
print(sum_str)
return HttpResponse(data) def login(request):
"""
用户登录 相应的状态码:
成功:1000
验证码失败:1001
用户名密码失败:1002
:param request:
:return: """
response_msg = {'code':None,'msg':None}
if request.method == 'GET':
return render(request,'login.html')
else:
username = request.POST.get('username')
password = request.POST.get('password') #得到验证码
valid_core = request.POST.get('valid_core') if valid_core.upper() == request.session.get('valid_str').upper(): #验证是否登录成功
user_obj = auth.authenticate(username=username,password=password) if user_obj:
#将用户的信息放入session中
#session注入 persission_input(request,user_obj) response_msg['code']=1000
response_msg['msg']='用户名密码正确'
else:
response_msg['code'] = 1002
response_msg['msg'] = '用户名或密码错误' else:
response_msg['code']=1001
response_msg['msg']='验证码输入错误' return JsonResponse(response_msg) def logout(request):
"""退出登录,并清除session"""
auth.logout(request)
return redirect('login')

4 register的html   register.html:

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
</head>
<body> <h1>注册界面</h1>
<div class="container-fluid">
<div class="row">
<div class="col-md-6 col-md-offset-3">
<form action="{% url 'register' %}" method="post" novalidate>
{% csrf_token %}
{% for foo in form_obj %}
<div class="form-group">
<label for="{{ foo.id_for_label }}" class="control-label"> {{ foo.label }}</label>
{{ foo }} <span class="text-danger"> {{ foo.errors.0 }}</span>
</div>
{% endfor %}
<input type="submit" class="btn btn-primary pull-right" value="注册">
</form>
</div>
</div>
</div> <script src="{% static 'bootstrap-3.3.7-dist/js/jquery-3.4.1.js' %}"></script>
<script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script>
</body>
</html>

5 登录的html login.html

{% load staticfiles %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
</head>
<body> <h1>登录界面</h1> <div class="container-fluid">
<div class="row">
{% csrf_token %}
<div class="col-md-4 col-md-offset-4">
<div class="form-group">
<label for="username" >用户名</label>
<input type="text" name = "username" id="username" class="form-control"> </div> <div class="form-group">
<label for="password">密码</label>
<input type="password" name="password" id="password" class="form-control">
</div> <div class="form-group">
<label for="valid_core">验证码</label>
<div class="row">
<div class="col-sm-6"> <input type="text" name="valid_core" id="valid_core" class="form-control"></div> {# 得到验证码#}
<div class="col-sm-6">
<img src="{% url 'get_valid_img' %}" alt="" id="valid_core_img">
</div> </div>
</div>
<span class="error"></span> <button type="button" class="btn btn-primary pull-right login">登录</button> </div>
</div>
</div> <script src="{% static 'bootstrap-3.3.7-dist/js/jquery-3.4.1.js' %}"></script>
<script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script> <script>
$('.login').on('click',function () {
console.log(111)
var username = $('[name=username]').val();
var password = $('[name=password]').val();
var valid_core = $('[name=valid_core]').val();
var csrf_token = $('[name=csrfmiddlewaretoken]').val()
console.log(csrf_token) $.ajax({
url:"{% url 'login' %}",
type:'post',
data:{
username: username,
password:password,
valid_core:valid_core,
csrfmiddlewaretoken:csrf_token },
success:function (res) {
if (res.code === 1000){
var href = location.search.slice(6);
if (href){ location.href = href
}else {
location.href ='{% url 'index' %}'
} }else {
$('.error').text(res.msg)
}
} }) }) $('#valid_core_img').click(function () {
console.log($(this))
$(this)[0].src +='?'; }) </script> </body>
</html>

Django中 基于form的注册,基于ajax的登录的更多相关文章

  1. Django中的Form

    Form 一.使用Form Django中的Form使用时一般有两种功能: 1.生成html标签 2.验证输入内容 要想使用django提供的form,要在views里导入form模块 from dj ...

  2. Django中的form组件

    Django中的form组件有两大作用 1.验证获取正确的结果或者错误信息 2.生成html代码 一.为什么需要form组件呢? 在写form表单,提交数据时,自己写验证的代码是一件非常困难的事情. ...

  3. Django框架 之 Form表单和Ajax上传文件

    Django框架 之 Form表单和Ajax上传文件 浏览目录 Form表单上传文件 Ajax上传文件 伪造Ajax上传文件 Form表单上传文件 html 1 2 3 4 5 6 7 <h3& ...

  4. 转 Django中的Form

    https://www.cnblogs.com/chenchao1990/p/5284237.html Form 一.使用Form Django中的Form使用时一般有两种功能: 1.生成html标签 ...

  5. Django中的Form表单

    Django中已经定义好了form类,可以很容易的使用Django生成一个表单. 一.利用Django生成一个表单: 1.在应用下创建一个forms文件,用于存放form表单.然后在forms中实例华 ...

  6. django中的 form 表单操作

     form组件  1. 能做什么事?   1. 能生成HTML代码  input框   2. 可以校验数据   3. 保留输入的数据   4. 有错误的提示   1. 定义   from django ...

  7. django中使用Form组件

    内容: 1.Form组件介绍 2.Form组件常用字段 3.Form组件校验功能 4.Form组件内置正则校验 参考:https://www.cnblogs.com/liwenzhou/p/87478 ...

  8. Django中的Form表单验证

    回忆一下Form表单验证的逻辑: 前端有若干个input输入框,将用户输入内容,以字典传递给后端. 后端预先存在一个Form表单验证的基类,封装了一个检测用户输入是否全部通过的方法.该方法会先定义好错 ...

  9. Django 中的Form、ModelForm

    一.ModelForm 源码 class ModelForm(BaseModelForm, metaclass=ModelFormMetaclass): pass def modelform_fact ...

随机推荐

  1. 多Tabs的横向滚动插件(支持Zepto和jQuery)

    一. 效果图 二. 功能介绍 1. 支持横向移动 2. 支持点击Tab后该Tab居中 3. 拉到最左边和最右边后依然可以拉动,只是tabs的移动距离变小. 三. 使用说明 1. 在你的html中添加T ...

  2. 关于uboot下data abort的问题

    在uboot下,常常会出现一些很让人揪心的问题. 解决这些问题的关键就是方法与方向.把握好这两点,一切问题都能够迎刃而解.同一时候也要自信.例如以下: 有时我们会遇到例如以下的出错信息,这时CPU会r ...

  3. ios学习之旅---指针也不难

    1.认识指针 #include <stdio.h> //基本数据类型作为函数參数传递是值传递 //void moveFront(int x ,int y) //{ // x = x + 2 ...

  4. java web项目优化记录:优化考试系统

    考试系统在进行压力測试时发现,并发量高之后出现了button无反应.试题答案不能写到数据库的问题,于是针对这些核心问题,进行了优化. 数据库方面: Select语句:Select * from TEB ...

  5. PhoneGap3+版本号的安装、配置和使用[图]

    如若转载.请注明博文地址及原作者(RisingWonderland). PhoneGap2+版本号最高为2.9.1,从3+版本号開始,PhoneGap官方不再提供下载安装包,须要在联网状态下.通过No ...

  6. Database returned no natively generated

    database returned no natively generated 分类:Hibernatehbm.xml中的配置如下: <id name="logId" typ ...

  7. js添加页面元素

    js动态创建html元素需要使用到下面这些常见的js方法. getElementById();//返回带有指定 ID 的元素. getElementsByTagName();//返回包含带有指定标签名 ...

  8. Xshell配色方案啊【学习笔记】

    自己移植从putty版本移植到Xshell的配色方案,效果不错,看上去挺舒服. [myisayme] text(bold)=eaeaea magenta(bold)=ff55ff text=fffff ...

  9. 软-RAID 5组建

    图文版raid5组建之软RAID  [复制链接]   发表于 2007-3-6 09:19 | 来自  51CTO网页 [只看他] 楼主             硬件raid5的组建和使用,基本上说完 ...

  10. Silverlight,Windows 8应用开发实例教程系列汇总

    Kevin Fan分享开发经验,记录开发点滴 Silverlight,Windows 8应用开发实例教程系列汇总 2012-06-18 01:05 by jv9, 2145 阅读, 3 评论, 收藏, ...