天天生鲜项目 python邮箱_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'

{username},欢迎您成为天天生鲜注册会员

请点击下面链接激活您的账户' \

f'http://127.0.0.1:8000/user/active/{token}'

send_mail(subject, message, sender, receiver, html_message=html_message)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值