天天生鲜(Python)Django项目学习资料(视频、源码)
生活随笔
收集整理的這篇文章主要介紹了
天天生鲜(Python)Django项目学习资料(视频、源码)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
項(xiàng)目展示
資料說明
全套視頻教程,源碼詳細(xì)注釋等,如下方式獲取:
天天生鮮(Python)Django項(xiàng)目學(xué)習(xí)資料(視頻、源碼)
部分源碼
from django.shortcuts import render,redirect from django.core.urlresolvers import reverse from django.core.mail import send_mail from django.contrib.auth import authenticate, login from django.views.generic import View from django.http import HttpResponse from django.conf import settingsfrom user.models import User from celery_tasks.tasks import send_register_active_email from itsdangerous import TimedJSONWebSignatureSerializer as Serializer from itsdangerous import SignatureExpired import re import time # Create your views here.# /user/register # GET POST PUT DELETE OPTION def register(request):'''注冊(cè)'''if request.method == 'GET':# 顯示注冊(cè)頁(yè)面return render(request, 'register.html')else:# 進(jìn)行注冊(cè)處理# 接收數(shù)據(jù)username = request.POST.get('user_name')password = request.POST.get('pwd')email = request.POST.get('email')allow = request.POST.get('allow')# 進(jìn)行數(shù)據(jù)校驗(yàn)if not all([username, password, email]):# 數(shù)據(jù)不完整return render(request, 'register.html', {'errmsg': '數(shù)據(jù)不完整'})# 校驗(yàn)郵箱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': '請(qǐng)同意協(xié)議'})# 校驗(yàn)用戶名是否重復(fù)try:user = User.objects.get(username=username)except User.DoesNotExist:# 用戶名不存在user = Noneif user:# 用戶名已存在return render(request, 'register.html', {'errmsg': '用戶名已存在'})# 進(jìn)行業(yè)務(wù)處理: 進(jìn)行用戶注冊(cè)u(píng)ser = User.objects.create_user(username, email, password)user.is_active = 0user.save()# 返回應(yīng)答, 跳轉(zhuǎn)到首頁(yè)return redirect(reverse('goods:index'))def register_handle(request):'''進(jìn)行注冊(cè)處理'''# 接收數(shù)據(jù)username = request.POST.get('user_name')password = request.POST.get('pwd')email = request.POST.get('email')allow = request.POST.get('allow')# 進(jìn)行數(shù)據(jù)校驗(yàn)if not all([username, password, email]):# 數(shù)據(jù)不完整return render(request, 'register.html', {'errmsg':'數(shù)據(jù)不完整'})# 校驗(yàn)郵箱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':'請(qǐng)同意協(xié)議'})# 校驗(yàn)用戶名是否重復(fù)try:user = User.objects.get(username=username)except User.DoesNotExist:# 用戶名不存在user = Noneif user:# 用戶名已存在return render(request, 'register.html', {'errmsg':'用戶名已存在'})# 進(jìn)行業(yè)務(wù)處理: 進(jìn)行用戶注冊(cè)u(píng)ser = User.objects.create_user(username, email, password)user.is_active = 0user.save()# 返回應(yīng)答, 跳轉(zhuǎn)到首頁(yè)return redirect(reverse('goods:index'))# /user/register class RegisterView(View):'''注冊(cè)'''def get(self, request):'''顯示注冊(cè)頁(yè)面'''return render(request, 'register.html')def post(self, request):'''進(jìn)行注冊(cè)處理'''# 接收數(shù)據(jù)username = request.POST.get('user_name')password = request.POST.get('pwd')email = request.POST.get('email')allow = request.POST.get('allow')# 進(jìn)行數(shù)據(jù)校驗(yàn)if not all([username, password, email]):# 數(shù)據(jù)不完整return render(request, 'register.html', {'errmsg': '數(shù)據(jù)不完整'})# 校驗(yàn)郵箱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': '請(qǐng)同意協(xié)議'})# 校驗(yàn)用戶名是否重復(fù)try:user = User.objects.get(username=username)except User.DoesNotExist:# 用戶名不存在user = Noneif user:# 用戶名已存在return render(request, 'register.html', {'errmsg': '用戶名已存在'})# 進(jìn)行業(yè)務(wù)處理: 進(jìn)行用戶注冊(cè)u(píng)ser = User.objects.create_user(username, email, password)user.is_active = 0user.save()# 發(fā)送激活郵件,包含激活鏈接: http://127.0.0.1:8000/user/active/3# 激活鏈接中需要包含用戶的身份信息, 并且要把身份信息進(jìn)行加密# 加密用戶的身份信息,生成激活tokenserializer = Serializer(settings.SECRET_KEY, 3600)info = {'confirm':user.id}token = serializer.dumps(info) # bytestoken = token.decode()# 發(fā)郵件send_register_active_email.delay(email, username, token)# 返回應(yīng)答, 跳轉(zhuǎn)到首頁(yè)return redirect(reverse('goods:index'))class ActiveView(View):'''用戶激活'''def get(self, request, token):'''進(jìn)行用戶激活'''# 進(jìn)行解密,獲取要激活的用戶信息serializer = Serializer(settings.SECRET_KEY, 3600)try:info = serializer.loads(token)# 獲取待激活用戶的iduser_id = info['confirm']# 根據(jù)id獲取用戶信息user = User.objects.get(id=user_id)user.is_active = 1user.save()# 跳轉(zhuǎn)到登錄頁(yè)面return redirect(reverse('user:login'))except SignatureExpired as e:# 激活鏈接已過期return HttpResponse('激活鏈接已過期')# /user/login class LoginView(View):'''登錄'''def get(self, request):'''顯示登錄頁(yè)面'''# 判斷是否記住了用戶名if 'username' in request.COOKIES:username = request.COOKIES.get('username')checked = 'checked'else:username = ''checked = ''# 使用模板return render(request, 'login.html', {'username':username, 'checked':checked})def post(self, request):'''登錄校驗(yàn)'''# 接收數(shù)據(jù)username = request.POST.get('username')password = request.POST.get('pwd')# 校驗(yàn)數(shù)據(jù)if not all([username, password]):return render(request, 'login.html', {'errmsg':'數(shù)據(jù)不完整'})# 業(yè)務(wù)處理:登錄校驗(yàn)user = authenticate(username=username, password=password)if user is not None:# 用戶名密碼正確if user.is_active:# 用戶已激活# 記錄用戶的登錄狀態(tài)login(request, user)# 跳轉(zhuǎn)到首頁(yè)response = redirect(reverse('goods:index'))# 判斷是否需要記住用戶名remember = request.POST.get('remember')if remember == 'on':# 記住用戶名response.set_cookie('username', username, max_age=7*24*3600)else:response.delete_cookie('username')# 返回responsereturn responseelse:# 用戶未激活return render(request, 'login.html', {'errmsg':'賬戶未激活'})else:# 用戶名或密碼錯(cuò)誤return render(request, 'login.html', {'errmsg':'用戶名或密碼錯(cuò)誤'})總結(jié)
以上是生活随笔為你收集整理的天天生鲜(Python)Django项目学习资料(视频、源码)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言穷举算法 枚举法,c语言枚举法 穷
- 下一篇: 学习Python中用numpy与matp