BBS登录与注册功能
登录功能
视图函数
def my_login(request):
if request.method == 'GET':
return render(request, 'login.html')
else:
name = request.POST.get('name')
password = request.POST.get('password')
code_text = request.POST.get('text')
text = request.session.get('code_text')
text = text.lower()
user = authenticate(request, username=name, password=password)
if user:
if not text:
return HttpResponse('验证码不能为空')
if code_text == text:
login(request, user)
return HttpResponse('登录成功')
else:
return HttpResponse('验证码错误')
else:
return HttpResponse('用户名或密码错误')
前端页面:
<form>
{% csrf_token %}
<h2>登录界面</h2>
<hr>
<div class="form-group">
<label for="name">用户名</label>
<input type="text" name="name" id="name" class="form-control" placeholder="用户名" required>
</div>
<div class="form-group">
<label for="password">密码</label>
<input type="password" name="password" id="password" class="form-control" placeholder="密码" required>
</div>
<div class="form-group">
<label for="valid_code">验证码</label>
<div class="row">
<div class="col-md-6">
<input type="text" name="valid_code" id="valid_code" class="form-control" required>
</div>
<img src="/get_code/" alt="" width="50%" height="35" id="img_code" draggable="false">
</div>
</div>
</form>
<a href="/register/" class="btn btn-primary pull-left">注册</a>
<button type="button" class="btn btn-primary pull-right" id="btn">登录</button>
<a href="#" id="change" draggable="false" class="change pull-right">看不清,换一张</a>
<script>
$('#btn').click(function () {
$.ajax({
url: '/login/',
type: 'post',
data: {
'csrfmiddlewaretoken': $('[name="csrfmiddlewaretoken"]').val(),
'name': $('#name').val(),
'password': $('#password').val(),
'text': $('#valid_code').val()
},
success: function (data) {
alert(data)
}
})
});
$('#change').click(function () {
$('#img_code')[0].src += '?'
})
</script>
注册功能
froms组件
class MyForms(forms.Form):
username = forms.CharField(max_length=18, min_length=2, label='用户名',
error_messages={'max_length': '最长不超过18位', 'min_length': '最短为2个字符', 'required': '不能为空'},
widget=widgets.TextInput(attrs={'class': 'form-control', 'placeholder': '用户名'}))
password = forms.CharField(max_length=18, min_length=2, label='密码',
error_messages={'max_length': '最长不超过18位', 'min_length': '最短为2个字符', 'required': '不能为空'},
widget=widgets.PasswordInput(attrs={'class': 'form-control', 'placeholder': '密码'}))
re_password = forms.CharField(max_length=18, min_length=2, label='确认密码',
error_messages={'max_length': '最长不超过18位', 'min_length': '最短为2个字符',
'required': '不能为空'},
widget=widgets.PasswordInput(attrs={'class': 'form-control', 'placeholder': '确认密码'}))
email = forms.EmailField(label='邮箱', error_messages={'invalid': '不符合邮箱格式', 'required': '不能为空'},
widget=widgets.EmailInput(attrs={'class': 'form-control', 'placeholder': '邮箱'}))
def clean_username(self):
name = self.cleaned_data.get('username')
user = models.UserInfo.objects.filter(username=name).first()
if user:
raise ValidationError('用户名已存在')
else:
return name
def clean(self):
pwd = self.cleaned_data.get('password')
re_pwd = self.cleaned_data.get('re_password')
if pwd and re_pwd:
if pwd == re_pwd:
return self.cleaned_data
else:
raise ValidationError('两次密码不一致')
视图函数
def my_register(request):
if request.method == 'GET':
myforms = MyForms()
return render(request, 'register.html', locals())
if request.is_ajax():
response = {'status': 100, 'msg': None}
myforms = MyForms(request.POST)
if myforms.is_valid():
data = myforms.cleaned_data
data.pop('re_password')
my_file = request.FILES.get('myfile')
if my_file:
data['avatar'] = my_file
user = models.UserInfo.objects.create_user(**data)
else:
response['status'] = 101
response['msg'] = myforms.errors
return JsonResponse(response)
前端页面
<body>
<div class="container-fluid">
<div class="row">
<div class="col-md-4 col-md-offset-4">
<form id="form">
<h2>注册界面</h2>
<hr>
{% csrf_token %}
{% for foo in myforms %}
<div class="form-group">
<label for="{{ foo.auto_id }}">{{ foo.label }}</label>
{{ foo }}
</div>
{% endfor %}
<div class="form-group">
<label for="myfile">头像<img src="/static/img/default.png" id="img_file" alt="" width="40"
height="40"></label>
<input type="file" id="myfile">
</div>
</form>
<button type="button" class="btn btn-primary pull-right" id="btn">提交</button>
</div>
</div>
</div>
</body>
<script>
// change为控件值发生变化时触发的事件
$('#myfile').change(function () {
// 取出文件
var file_obj = $('#myfile')[0].files[0];
// 生成文件阅读器对象,把获取的图片放到img
try{
var filereader = new FileReader();
// 把图片对象读入阅读器对象
filereader.readAsDataURL(file_obj);
// 等加载完毕后,渲染到img标签中
filereader.onload = function () {
// filereader.result获取阅读器对象中的值
$("#img_file").attr('src', filereader.result)
}
}catch (e) {
}
});
$('#btn').click(function () {
// 上传文件使用formdata对象
var formdata = new FormData();
var formarr = $('#form').serializeArray();
console.log(formarr);
// jquery循环 循环往formdata对象中添加数据
$.each(formarr, function (key, obj) {
formdata.append(obj.name, obj.value)
});
// 添加文件对象数据
formdata.append('myfile', $('#myfile')[0].files[0]);
$.ajax({
url: '/register/',
type: 'post',
processData: false,
contentType: false,
data: formdata,
success: function (data) {
if (data.status == '100'){
location.href = '/login/'
}else {
var msg = data.msg;
$('span').remove();
for (i in msg){
console.log(i,msg[i]);
if (i == '__all__'){
$('#id_re_password').after('<span class="pull-right">'+ msg[i] + '</span>')
}
$('#id_'+i).after('<span class="pull-right">'+ msg[i] + '</span>')
}
}
}
})
})
</script>
BBS登录与注册功能的更多相关文章
- AndroidStudio制作登录和注册功能的实现,界面的布局介绍
前言 大家好,给大家带来AndroidStudio制作登录和注册功能的实现,界面的布局介绍的概述,希望你们喜欢 每日一句: Success is connecting with the world a ...
- VS连接SQL Server 2008,并实现登录和注册功能
--------------------- 作者:Cambridge 来源:CSDN 原文:https://blog.csdn.net/cambridgeacm/article/details/797 ...
- 基于struts2和hibernate的登录和注册功能——完整实例
1.该项目使用MySQL数据库,数据库名为test,表名info,如图所示: 2.配置web.xml(Struts2使用) <?xml version="1.0" encod ...
- 用java集合模拟登录和注册功能
package com.linkage.login; import java.util.HashMap;import java.util.Iterator;import java.util.Map;i ...
- 用java数组模拟登录和注册功能
package com.linkage.login; import java.util.Scanner; public class user { // 存储用户名和密码 public static S ...
- JavaWeb 实现简单登录、注册功能
1.首先创建一个简单的动态Javaweb项目 2.然后手动建立文件目录: 项目创建好之后,在src下建几个包: controller:控制器,负责转发请求,对请求进行处理,主要存放servlet: d ...
- Unity uGUI 登录及注册功能
上次我们已经完成了登录界面的模拟功能,今天咱们把上次没做完的继续完善下!那么废话少说直接开始吧! PS:本次完善的功能有: 1,增加对数据库的操作. 2,使用了MD5Key值加密 3,完善登录和组测功 ...
- 利用PHP实现登录与注册功能以及使用PHP读取mysql数据库——以表格形式显示数据
登录界面 <body><form action="login1.php" method="post"><div>用户名:&l ...
- 使用md5加密算法完成简单的登录和注册功能
原理: 登录:后端controller层获取到客户的密码,通过下面代码:new Sha256Hash(pwd).toHex();将密码转换成md5散列,生成一个新的字符串与数据库的值进行比对,根据不同 ...
随机推荐
- inception_web
1) wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py 2) python ez_setup.py --insecur ...
- 最新的PHP trait使用方法详解
说通俗点,PHP中使用trait关键字是为了解决一个类既想集成基类的属性和方法,又想拥有别的基类的方法,而trait一般情况下是和use搭配使用的. 具体案例,查看php中文网这篇文章.http:// ...
- 一次http请求响应流程
前端客户端 发起http请求 web服务器接收并解析http报文 通过WSGI协议发送给web框架 web框架创建请求对象 中间层处理 具体的视图处理-业务处理 中间层处理 创建http响应对象 返回 ...
- 吴裕雄 python 机器学习——K均值聚类KMeans模型
import numpy as np import matplotlib.pyplot as plt from sklearn import cluster from sklearn.metrics ...
- 【杂记】linux下各种软件安装方法(持续记录)
1.安装jdk: 网上一堆说先从windows下压缩包,然后通过共享文件夹copy到linux系统里,然后解压安装,emmmmm 首先进入usr文件夹,新建java文件夹: mkdir java 直接 ...
- 高阶篇:5)仿真研究Simulation studies
本章目的:了解仿真,初步学会怎么应用仿真. 1.仿真的定义 仿真------就是用模型(物理模型或数学模型)代替实际系统进行实验和研究. 把实际系统建立成物理模型或数学模型进行研究,然后把对模型实 ...
- rest-framework框架组件
序列化组件 创建一个序列化类, 视图四种方式 以下代码都需要创建一个serializers.py文件 from rest_framework import serializers from CBV_a ...
- Pycharm+QTDesigner+PyQt5环境配置
python+PyQt5写界面很方便,记录下个人配置环境过程.... 安装软件: pycharm2017 Qt5.9.6 python3.6.6/python2.7.15 配置PyQt5: pytho ...
- easygui.py的安装和下载地址
easygui下载地址:http://nchc.dl.sourceforge.net/project/easygui/0.97/easygui-0.97.zip 安装:解压后将easygui.py拷贝 ...
- Fiddler使用三(Fiddler内置命令)
参考:http://blog.csdn.net/ohmygirl/article/details/17855031 一. Fiddler内置命令. 上一节使用Fiddler进行抓包分析中,介绍到,在w ...