Django之天天生鲜项目
准备工作
1、配置settings.py内置文件



注意: AUTH_USER_MODEL配置参数要在第一次迁移数据库之前配置,否则可能django的认证系统工作不正常


2、创建应用



3、配置主路由

一、用户注册
1、创建用户注册model模型
1)设置模型抽象类



2)进入user应用设置model


这里使用的是django内部AbstractUser用户类
2、显示用户注册页面
方法一:使用FBV请求处理
FBV:(function base views) 就是在视图里使用函数处理请求。
1)定义路由
import . import views
url(r'^register$', views.register, name='register')
2)定义注册的视图函数
import re
from django.shortcuts import render, redirect
from .models import User
from django.core.urlresolvers import reverse def register(request):
'''显示注册页面'''
if request.method == 'GET':
return render(request, 'register.html')
else:
username = request.POST.get('user_name')
password = request.POST.get('pwd')
email = request.POST.get('email')
allow = request.POST.get('allow') # 进行数据校验
if not all([username, password, email]):
# 数据不完整
return render(request, 'register.html', {'errmsg': '数据不完整'}) # 邮箱校验
if not re.match(r'^[a-z0-9][\w\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$', email):
return render(request, 'register.html', {'errmsg': '邮箱格式不正确'}) # 天天生鲜协议校验
if allow != 'on':
return render(request, 'register.html', {'errmsg': '请同意协议'}) # 校验用户名是否重复
try:
user = User.objects.get(username=username)
except User.DoesNotExist:
# 用户名不存在
user = None
if user:
# 用户名以存在
return render(request, 'register.html', {'errmsg': '用户名已存在'}) # 进行业务处理:用户注册
user = User.objects.create_user(username, email, password)
user.is_active = 0
user.save()
# 返回应答,跳转到首页
return redirect(reverse('goods:index'))
方法二:使用CBV请求处理(推荐)
CBV(class base views) 就是在视图里使用类处理请求。
1)定义路由
url(r'^register$', RegisterView.as_view(), name='register'), # 注册
2)定义注册视图类
import re
from django.shortcuts import render, redirect
from .models import User
from django.core.urlresolvers import reverse
from django.views.generic import View
from django.conf import settings
from django.http import HttpResponse class RegisterView(View):
"""注册"""
def get(self, request):
"""显示注册页面"""
return render(request, 'register.html') def post(self, request):
"""进行注册处理"""
# 接收数据
username = request.POST.get('user_name')
password = request.POST.get('pwd')
email = request.POST.get('email')
allow = request.POST.get('allow') # 进行数据校验
if not all([username, password, email]):
# 数据不完整
return render(request, 'register.html', {'errmsg': '数据不完整'}) # 邮箱校验
if not re.match(r'^[a-z0-9][\w\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$', email):
return render(request, 'register.html', {'errmsg': '邮箱格式不正确'}) # 天天生鲜协议校验
if allow != 'on':
return render(request, 'register.html', {'errmsg': '请同意协议'}) # 校验用户名是否重复
try:
user = User.objects.get(username=username)
except User.DoesNotExist:
# 用户名不存在
user = None
if user:
# 用户名以存在
return render(request, 'register.html', {'errmsg': '用户名已存在'}) # 进行业务处理:用户注册
user = User.objects.create_user(username, email, password)
user.is_active = 0
user.save()
# 返回应答,跳转到首页
return redirect(reverse('goods:index'))
3)激活邮箱
1)下载加密签名数据包

2)设置路由,编写代码逻辑

class ActiveView(View):
"""用户激活"""
def get(self, request, token):
"""进行用户激活"""
# 进行解密 获取要激活的用户信息
serializer = Serializer(settings.SECRET_KEY, 3600)
try:
info = serializer.loads(token)
# 获取待激活用户的id
user_id = info['confirm'] # 根据id获取用户信息
user = User.objects.get(id=user_id)
user.is_active = 1
user.save() # 跳转到登录页面
return redirect(reverse('user:login'))
except SignatureExpired as e:
# 激活链接已过期
return HttpResponse('激活链接已过期')
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer, SignatureExpired
from django.core.mail import send_mail
# 发送激活邮件 包含激活链接:Http://127.0.0.1:8000/user/active/3
# 激活链接中需要包含用户的身份信息 并且要把身份信息进行加密
# 加密用户的身份信息 生成激活token
class Register(View):
...
serializer = Serializer(settings.SECRET_KEY, 3600)
info = {'confirm': user.id}
token = serializer.dumps(info)
token = token.decode('utf-8')
4)发送邮箱
流程:Django网站--->smtp服务器--->目的邮箱
配置settings.py

class Register(View):
...
# 发邮箱
subject = '天天生鲜欢迎信息'
message = '邮件正文'
sender = settings.EMAIL_FROM
receiver = [email]
html_message = f'<h1>{username},欢迎您成为天天生鲜注册会员</h1>请点击下面链接激活您的账户' \
f'<a href="http://127.0.0.1:8000/user/active/{token}">http://127.0.0.1:8000/user/active/{token}</a>'
send_mail(subject, message, sender, receiver, html_message=html_message)
Django之天天生鲜项目的更多相关文章
- python 天天生鲜项目
		
python 天天生鲜项目 django版:https://github.com/Ivy-1996/fresh flask版:https://github.com/Ivy-1996/flask-fre ...
 - django天天生鲜项目
		
.后台admin管理天天生鲜商品信息 models里 from django.db import modelsfrom tinymce.models import HTMLField #需要pip安装 ...
 - 网站开发学习Python实现-Django的models学习-生鲜项目(6.3.2)
		
@ 目录 1.说明 2.模型类的设计 3.代码的具体实现 4.详情地址 关于作者 1.说明 models是django的很重要的部分,所以深入研究. 本文章的所研究项目为黑马教育python课程中的项 ...
 - 天天生鲜 - App设计
		
天天生鲜-思路数据库设计 天天生鲜-各个App 全文检索 天天生鲜-静态文件 一.项目目录 daily_fresh_demo - daily_fresh_demo - df_cart # 购物车功能 ...
 - python-django-天天生鲜项目
		
1 需求分析 github源码:https://www.github.com/wangyingchuang/dailyfresh 1.1 用户模块 1) 注册页 l 注册时校验用户名是否已被注册. ...
 - DJANGO-天天生鲜项目从0到1-015-部署-uWSGI+Nginx
		
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...
 - DJANGO-天天生鲜项目从0到1-014-订单-订单评论
		
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...
 - DJANGO-天天生鲜项目从0到1-013-订单-支付宝支付
		
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...
 - DJANGO-天天生鲜项目从0到1-012-订单-用户订单页面
		
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...
 
随机推荐
- CentOS上安装配置Ruby on Rails
			
0.install sublime editor(optional) ref:http://www.tecmint.com/install-sublime-text-editor-in-linux/ ...
 - 解决ubuntu开机进入grub界面的问题
			
开机显示GRUB界面显示如下字样,几秒后自动进入登录界面 *Ubuntu Advanced options for Ubuntu .... 解决方案: 1.编辑grub文件 sudo vim /etc ...
 - array_walk与array_map的区别
			
1.array_walk是用于用户自定义的函数,所以想用array_walk($aIds, "trim");去掉数据元素中的空格是达不到目的的只能用array_walk($aIds ...
 - 【html5】 解决 video标签  不自动全屏
			
<video controls="controls" poster='' src='' preload="auto" x5-playsinline=&qu ...
 - [Golang] 编译程序时打上git提交信息标记
			
1.加入代码 //version.go package version import ( "flag" "fmt" "os" ) var ( ...
 - 日志系统的 ELK 的搭建
			
https://www.cnblogs.com/yuhuLin/p/7018858.html 快速搭建ELK日志分析系统 一.ELK搭建篇 官网地址:https://www.elastic.co/cn ...
 - Centos7 安装 Ipython的方法
			
环境:Centos7 最小化安装yum源设置:阿里的base源和epel源python版本:2.7.5 yum install -y python2-pip.noarchyum install -y ...
 - linux--python虚拟环境篇
			
python的虚拟环境 首先我们得知道为什么要要用虚拟环境? 在使用python开发过程中,各种业务需求多了,导致工程任务多了,难免会碰到不同的工程依赖不同版本库的问题,;或者是在开发的时候不想让物理 ...
 - RMQPOJ3264
			
Balanced Lineup POJ-3264 DP分析 设A[i]是要求区间最值的数列,F[i, j]表示从第i个数起连续2^j个数中的最大值.(DP的状态) 初状态是F[i,0]=A[i] 状态 ...
 - 【转】前端框架天下三分:Angular React 和 Vue的比较
			
前端框架天下三分:Angular React 和 Vue的比较 原文链接:http://blog.csdn.net/haoshidai/article/details/52346865 前端这几年的技 ...