天天生鲜项目 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)
總結
以上是生活随笔為你收集整理的天天生鲜项目 python邮箱_Django之天天生鲜项目的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java——获取视频某一帧的图片
- 下一篇: Python进行模糊匹配