Django项目登录注册系统
Django项目之个人网站
关注公众号“轻松学编程”了解更多。
Github地址:https://github.com/liangdongchang/MyWeb.git
感兴趣的可以fork或star一下
功能模块一:登录/注册
一、说明
功能:用户名、密码、验证码输入、头像上传
技术:文件上传、验证码、密码加密、会话技术
二、界面
1、登录
2、注册
三、部分代码
1 路由处理(V)
2.1 项目下的总路由
urlpatterns = [
url('^app/',include('SitesApp.urls',namespace='sitesApp'))
]
2.2 子应用下的路由
# 登录
url(r'^login/', views.login, name='login'),
# 注册
url(r'^register/', views.register, name='register'),
3、视图函数处理(Views)
3.1 登录
# 登录
def login(request):
if request.method == 'GET':
return render(request, 'SitesApp/login.html')
else:
# 预定义一个最终返回的Response对象(可以动态地为其配置内容,要想勒令客户端做事情必须要有一个Response对象)
resp = HttpResponse()
respData = {'status': '0', 'ret': '登录失败,输入信息有误!!!'}
# 获取用户输入的用户名、密码、验证码
uname = request.POST.get('uname', None)
upwd = request.POST.get('upwd', None)
vcode = request.POST.get('vcode', None)
# 校验验证码
# 从session中获取正确的验证码
sessVcode = request.session.get('vcode', None)
# 比较用户输入的验证码与正确的验证码是否匹配
# 事先全部转换为小写形式,这样用户可以忽略大小写
if vcode and sessVcode and vcode.lower() == sessVcode.lower():
# 对密码做消息摘要
upwd = useMd5(upwd)
# 查询名称为uname的用户
user = User.uManager.filter(uName=uname).first()
if not user:
respData = {'status': '0', 'ret': '用户不存在!!!'}
# 检查密码、验证码是否匹配
if user and upwd == user.uPwd :
# # 勒令客户端(通过cookie)自己将状态保存起来,过期时间为60秒
# resp.set_cookie('uname',uname,max_age=60*1)
# # 让服务端通过session保存用户状态
# 向客户端端要session其实是要存储在cookie中的sessionid
# request.session的言下之意是"request.getSessionBySessionid"
# request.session['uname'] = uname
# request.session['upwd'] = upwd
'''
token相当于手动实现的session
session将用户状态保存在django_session的表中
token将用户状态保存在何处完全取决于程序媛自己,例如:User表
但务必使保存用户状态的这张表中有用于作为[id/key/信物]的字段(该字段必须唯一),例如:utoken
和session一样,必须在客户端的cookie中存一个相同的[id/key/信物],例如:utoken
如何获取存储的用户状态:先从cookie中拿出utoken,进而查询User表中utoken为xxx的记录,就可以拿到uname了
'''
# 将用户状态保存在token中,让客户端持有一个token,将该token保存在某个表中
# 生成令牌/信物
token = str(uuid.uuid4())
# 将该令牌/信物存储在客户端的cookie中,过期时间一天
resp.set_cookie('utoken', token,expires=60*60*24)
# 将同样的信物存一份在服务端的表中
user.uToken = token
try:
user.save()
respData = {'status': '1', 'ret': 'login success!'}
except BaseException as e:
print(e)
respData = {'status': '0', 'ret': '登录失败,输入信息有误!!!'}
pass
resp.content = json.dumps(respData)
return resp
3.2 注册
# 注册
def register(request):
if request.method == 'GET':
return render(request, 'SitesApp/register.html')
else:
# 获取用户输入的用户名、昵称、密码、验证码、上传的头像
uname = request.POST.get('uname', None)
unick = request.POST.get('unick', None)
upwd = request.POST.get('upwd', None)
vcode = request.POST.get('vcode', None)
uip = getUserIP(request)
# 拿到用户上传的文件数据,类型是框架类InMemoryUploadedFile
uiconFile = request.FILES.get('uicon', None)
# <class 'django.core.files.uploadedfile.InMemoryUploadedFile'>
print(uname,unick, upwd, vcode, uiconFile, type(uiconFile))
# 手动存储上传的文件
# 自定义文件位置
# if uiconFile:
# fp = os.path.join(MEDIA_ROOT, 'x-' + uiconFile.name)
# # 写入文件
# with open(fp, 'wb') as file:
# # 逐"桶"读取上传的文件数据,并写入本地文件
# for buffer in uiconFile.chunks():
# file.write(buffer)
# 校验验证码
# 从session中获取正确的验证码
sessVcode = request.session.get('vcode', None)
# 比较用户输入的验证码与正确的验证码是否匹配
# 事先全部转换为小写形式,这样用户可以忽略大小写
if vcode and sessVcode and vcode.lower() == sessVcode.lower():
user = User()
user.uName = uname
user.uNickName = unick
user.uIP = uip
# 对密码做消息摘要(目的是避免明文存储)
user.uPwd = useMd5(upwd)
# 将上传过来的文件直接赋值给用户的ImageField字段uicon
# 框架会自动将图片存储在MEDIA_ROOT中
if uiconFile:
user.uIcon = uiconFile
# 把数据写进数据库
try:
user.save()
return JsonResponse({'status': 1, 'ret': 'register success!'})
except BaseException as e:
print(e)
return JsonResponse({'status':0,'ret':'输入信息有误!'})
后记
【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。
也可加我微信【1257309054】,拉你进群,大家一起交流学习。
如果文章对您有帮助,请我喝杯咖啡吧!
公众号


关注我,我们一起成长~~
Django项目登录注册系统的更多相关文章
- Django项目之打分系统
打分系统 关注公众号"轻松学编程"了解更多. 项目GitHub地址:https://github.com/liangdongchang/VoteSys.git 1.开发需求 a. ...
- Django项目在linux系统中虚拟环境部署
1.在linux系统下,安装virtualenv 命令:pip install virtualenv 2.项目部署前的准备 1. Django web project deployment 1.1. ...
- php+mysql+apache实现登录注册系统
Php+mysql写网页注册登录系统 1.搭建msyql+php+apache的网站环境 (1) 在云服务器上搭建服务器,推荐使用宝塔集成 (2) 在本地windows搭建,推荐自己采用分开安装,这样 ...
- Python Django项目日志查询系统
该项目适合中小型公司日志查询工作.大型公司可以使用elk等.该系统其实就是调用了absible命令去查日志,然后把输出的信息输到页面查看. 日志查询系统 维护手册 作者:陈土锋 日期:2020年6月1 ...
- Django 项目搭建(ubuntu系统)
1 环境搭建 sudo apt-get install python3-pip 安装pip3 sudo pip3 install virtualenv 安装虚拟环境,这里展示virtualenv vi ...
- 33Flutter仿京东商城项目 登录 注册相关页面布局
加群452892873 下载对应33课文件,运行方法,建好项目,直接替换lib目录 以下列出的是本课涉及的文件. User.dart import 'package:flutter/material. ...
- 解决django项目在ubuntu系统上无法安装mysqlclient
首先我的项目是django2.0,python环境是3.5. 我们在本地开发完django项目了,在本地运行是成功的,然后我们把django项目放到服务器上,运行的时候就出错了. 如图: 我们都知道, ...
- day72 bbs项目☞登录注册
目录 一.表创建及同步 二.注册功能 二.登录页面搭建 一.表创建及同步 from django.db import models from django.contrib.auth.models im ...
- django项目登录中使用图片验证码
应用下创建untils文件夹放置封装图片验证码的函数 创建validCode.py文件定义验证码规则 import random def get_random_color(): return (ran ...
随机推荐
- 第三周:java面向对象部分总结(2)
<!--此处接上周--> 3.相关接口 对对象的排序,可以通过以下两种方法: 1.实现Comparable接口,重写compareTo方法: 2.Comparator<>比较器 ...
- python单元测试框架pytest
首先祝大家国庆节日快乐,这个假期因为我老婆要考注会,我也跟着天天去图书馆学了几天,学习的感觉还是非常不错的,这是一篇总结. 这篇博客准备讲解一下pytest测试框架,这个框架是当前最流行的python ...
- P4915 帕秋莉的魔导书(动态开点线段树)
题目背景 帕秋莉有一个巨大的图书馆,里面有数以万计的书,其中大部分为魔导书. 题目描述 魔导书是一种需要钥匙才能看得懂的书,然而只有和书写者同等或更高熟练度的人才能看得见钥匙.因此,每本魔导书都有它自 ...
- 看动画学算法之:linkedList
目录 简介 linkedList的构建 linkedList的操作 头部插入 尾部插入 中间插入 删除节点 简介 linkedList应该是一种非常非常简单的数据结构了.节点一个一个的连接起来,就成了 ...
- GAN网络之入门教程(五)之基于条件cGAN动漫头像生成
目录 Prepare 在上篇博客(AN网络之入门教程(四)之基于DCGAN动漫头像生成)中,介绍了基于DCGAN的动漫头像生成,时隔几月,序属三秋,在这篇博客中,将介绍如何使用条件GAN网络(cond ...
- 在阿里云上搭建私有GIT仓库
在阿里云上搭建私有GIT仓库 年轻人就得好好学习,不能这么颓废 最近做项目练练手,用到了github, 但是github访问速度是真的慢啊,下载项目,下载一天了.所以呢,我是个成熟的人了,只好自己搭建 ...
- CentOS7 下 swap 分区的创建、删除及相关配置
一般我们在购买云服务器(例如:阿里云ECS.腾讯云服务器)的时候,选择 CentOS 7 系统之后,登录系统,发现 swap 大小为 0(即没有分配). 如果我们想在该 服务器上安装 Oracle 数 ...
- ansible-playbook流程控制-when条件判断
1. ansible-playbook添加判断 when相当于shell脚本里的if 判断,when语句就是用来实现这个功能的,它是一个jinja2的语法,但是不需要双大括号,用法很简单 1 ...
- pytest文档54-Hooks函数terminal打印测试结果(pytest_report_teststatus)
前言 使用命令行执行pytest用例的时候,会在 terminal 终端打印整个用例的测试结果: .代表通过的用例 F代表失败的用例 E代表异常的用例 如果我们不喜欢这种报告结果,可以通过 pytes ...
- 【传递闭包】HDU 2157 How many ways??
UPD:现在才发现本题是个传递闭包 题目内容 春天到了,HDU校园里开满了花,姹紫嫣红,非常美丽. 葱头是个爱花的人,看着校花校草竞相开放,漫步校园,心情也变得舒畅. 为了多看看这迷人的校园,葱头决定 ...