第三百八十四节,Django+Xadmin打造上线标准的在线教育平台—路由映射与静态文件配置以及会员注册
第三百八十四节,Django+Xadmin打造上线标准的在线教育平台—路由映射与静态文件配置以及会员注册
基于类的路由映射
from django.conf.urls import url, include # 导入django自在的include逻辑
from django.contrib import admin
from django.views.generic import TemplateView # 导入django自带的TemplateView逻辑 import xadmin # 导入xadmin from app_users.views import deng_lu, zhu_ce, active_code, logout # 导入登录逻辑处理类 urlpatterns = [
url(r'^xadmin/', xadmin.site.urls), url(r'^index.html', TemplateView.as_view(template_name='index.html'), name='index'), url(r'^register.html', zhu_ce.as_view(), name='register'),
url(r'^captcha/', include('captcha.urls'), name='captcha'),
url(r'^active/(?P<active_de>.*)/$', active_code.as_view(), name="user_active"), url(r'^login.html', TemplateView.as_view(template_name='login.html'), name='login'),
url(r'^deng_lu', deng_lu.as_view(), name='deng_lu'),
url(r'^logout', logout.as_view(), name='deng_lu'),
]
静态文件配置
settings.py
STATIC_URL = '/static/' # 设置静态文件前缀名称
#配置静态文件目录
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'), # 设置静态文件路径
]
html静态文件引用
<!DOCTYPE html>
<html>
{% load staticfiles %} {# 启用静态文件引用 #}
<head>
<meta charset="UTF-8">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" >
<title>课程机构列表 - 慕学在线网</title>
<link rel="stylesheet" type="text/css" href="{% static 'css/reset.css' %}"> {# 启用静态文件引用后才可以 #}
<link rel="stylesheet" type="text/css" href="{% static 'css/animate.css' %}">
<link rel="stylesheet" type="text/css" href="{% static 'css/style.css' %}"> <script src="{% static 'js/jquery.min.js' %}" type="text/javascript"></script>
<script src="{% static 'js/jquery-migrate-1.2.1.min.js' %}" type="text/javascript"></script> </head>
会员注册
1,首先路由映射好逻辑处理类
from django.conf.urls import url, include # 导入django自在的include逻辑
from django.contrib import admin
from django.views.generic import TemplateView # 导入django自带的TemplateView逻辑 import xadmin # 导入xadmin from app_users.views import deng_lu, zhu_ce, active_code, logout # 导入登录逻辑处理类 urlpatterns = [
url(r'^xadmin/', xadmin.site.urls), url(r'^index.html', TemplateView.as_view(template_name='index.html'), name='index'), url(r'^register.html', zhu_ce.as_view(), name='register'),
url(r'^captcha/', include('captcha.urls'), name='captcha'),
url(r'^active/(?P<active_de>.*)/$', active_code.as_view(), name="user_active"), url(r'^login.html', TemplateView.as_view(template_name='login.html'), name='login'),
url(r'^deng_lu', deng_lu.as_view(), name='deng_lu'),
url(r'^logout', logout.as_view(), name='deng_lu'),
]
2,编写表单验证forms文件
from django import forms # 导入Django的表单验证模块
from captcha.fields import CaptchaField class zhu_ce_forms(forms.Form):
email = forms.EmailField(
required=True,
max_length=40,
min_length=2,
error_messages={
'required': '邮箱名不能为空',
'max_length': '邮箱名长度不得超过40个字符',
'min_length': '邮箱名长度不得少于2个字符',
}
)
password = forms.CharField(
required=True,
max_length=20,
min_length=2,
error_messages={
'required': '密码不能为空',
'max_length': '密码长度不得超过20个字符',
'min_length': '密码长度不得少于2个字符',
}
)
captcha = CaptchaField(
required=True,
error_messages={
'required': '验证码不能为空',
'invalid': '验证码不正确'
}
)
3,在逻辑处理类里将request.POST也就是用户提交的表单,放到表单类里验证,验证不通过返回提示信息,回填数据,验证通过获取验证通过的表单数据(包括验证码验证,前后将)
#!/usr/bin/env python
# -*- coding:utf8 -*-
import io # 导入io模块 from django.shortcuts import render, HttpResponse, redirect # 导入django向浏览器返回方法
from django.views.generic.base import View
from django.db.models import F,Q # 导入F和Q
from django.contrib.auth.hashers import make_password, check_password # 导入django密码加密,和密码验证
from django.contrib.auth import login # 调用django的登录函数 from app_users.forms import deng_lu_forms, zhu_ce_forms # 导入登录页面表单认证
from app_users.models import Users, Email # 导入数据库操作
from utils.email_send import send_register_email # 导入邮件发送 class zhu_ce(View):
def get(self, request):
yanzhm = zhu_ce_forms()
return render(request, 'register.html', {'yanzhm': yanzhm}) def post(self, request):
f = zhu_ce_forms(request.POST)
if f.is_valid(): # 判断认证是否成功
tong_guo = f.cleaned_data # 认证成功,接收用户数据
email = tong_guo['email']
password = tong_guo['password']else: # 认证不成功,接收错误信息
cuo_wu = f.errors # 接收错误信息
print(cuo_wu)
return render(request, 'register.html', {'cuo_wu': cuo_wu, 'yanzh': f}) # 将错误信息传到登录页面
4,将用户名拿到数据库,查找用户是否存在,用户存在提示信息回填数据,用户不存在说明可以注册,注意用户密码需要加密,可以用django密码加密函数make_password(要加密的密码),然后将用户信息写入数据库
#!/usr/bin/env python
# -*- coding:utf8 -*-
import io # 导入io模块 from django.shortcuts import render, HttpResponse, redirect # 导入django向浏览器返回方法
from django.views.generic.base import View
from django.db.models import F,Q # 导入F和Q
from django.contrib.auth.hashers import make_password, check_password # 导入django密码加密,和密码验证
from django.contrib.auth import login # 调用django的登录函数 from app_users.forms import deng_lu_forms, zhu_ce_forms # 导入登录页面表单认证
from app_users.models import Users, Email # 导入数据库操作
from utils.email_send import send_register_email # 导入邮件发送 class zhu_ce(View):
def get(self, request):
yanzhm = zhu_ce_forms()
return render(request, 'register.html', {'yanzhm': yanzhm}) def post(self, request):
f = zhu_ce_forms(request.POST)
if f.is_valid(): # 判断认证是否成功
tong_guo = f.cleaned_data # 认证成功,接收用户数据
email = tong_guo['email']
password = tong_guo['password']
user = Users.objects.filter(username=email).values()
if len(user) >= 1:
tishi = '用户已经存在'
return render(request, 'register.html', {'tishi': tishi, 'yanzh': f})
else:
a = {'username': email, # 将要写入的数据组合成字典,键为字段值为数据
'password': make_password(password),
'is_active': 0
}
Users.objects.create(**a) # 添加到数据库,注意字典变量名称一定要加**
send_register_email(email) # 执行验证邮件发送
return render(request, 'login.html')
else: # 认证不成功,接收错误信息
cuo_wu = f.errors # 接收错误信息
print(cuo_wu)
return render(request, 'register.html', {'cuo_wu': cuo_wu, 'yanzh': f}) # 将错误信息传到登录页面
5,激活用户,自定义一个用户邮件激活函数,
在数据库专门用一张表来记录激活用户所需要的随机字符和邮箱等信息
当用户数据写入数据库后,随机生成一个字符
向用户激活表里写入当前的随机字符,和用户验证邮箱
然后向用户的邮箱发送一条激活连接,激活连接由域名加随机字符组成,然后提示用户到邮箱激活
#!/usr/bin/env python
# -*- coding:utf8 -*- from random import Random # 导入随机函数
from django.core.mail import send_mail # 导入django邮件函数 from app_users.models import Email # 导入激活操作数据库表
from MxOnline.settings import DEFAULT_FROM_EMAIL def random_str(randomlength=8):
"""
循环获取随机字符串,默认8位
"""
str = ''
chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'
length = len(chars) - 1
random = Random()
for i in range(randomlength):
str+=chars[random.randint(0, length)]
return str def send_register_email(email, send_type="register"):
"""
发送邮件
:接收两个参数:
:第一个验证邮箱,第二个验证类型
"""
"""写入数据库验证信息"""
email_record = Email() # 实例化数据库表
if send_type == "update_email":
code = random_str(4) # 生成4位随机数
else:
code = random_str(16) # 生成16位随机数
email_record.code = code # 数据库写入验证随机数
email_record.email = email # 数据库写入验证邮箱
email_record.send_type = send_type # 数据库写入验证类型
email_record.save() """发送验证邮件"""
email_title = "" # 记录邮件标题
email_body = "" # 记录邮件内容 if send_type == "register":
email_title = "慕学在线网注册激活链接"
email_body = "请点击下面的链接激活你的账号: http://127.0.0.1:8000/active/{0}".format(code) send_status = send_mail(email_title, email_body, DEFAULT_FROM_EMAIL, [email])
if send_status:
pass
elif send_type == "forget":
email_title = "慕学在线网注册密码重置链接"
email_body = "请点击下面的链接重置密码: http://127.0.0.1:8000/reset/{0}".format(code) send_status = send_mail(email_title, email_body, DEFAULT_FROM_EMAIL, [email])
if send_status:
pass
elif send_type == "update_email":
email_title = "慕学在线邮箱修改验证码"
email_body = "你的邮箱验证码为: {0}".format(code) send_status = send_mail(email_title, email_body, DEFAULT_FROM_EMAIL, [email])
if send_status:
pass
6.设置激活连接逻辑
当用户点击激活连接时,获取到激活连接的随机字符,
将随机字符拿到激活表里去查询是否有这条随机字符,如果有,将当前随机字符的所有信息获取到,通过获取到的信息,将对应用户表里用户状态改为激活状态,返回登录页面,提示以激活请登录
from django.conf.urls import url, include # 导入django自在的include逻辑
from django.contrib import admin
from django.views.generic import TemplateView # 导入django自带的TemplateView逻辑 import xadmin # 导入xadmin from app_users.views import deng_lu, zhu_ce, active_code, logout # 导入登录逻辑处理类 urlpatterns = [
url(r'^xadmin/', xadmin.site.urls), url(r'^index.html', TemplateView.as_view(template_name='index.html'), name='index'), url(r'^register.html', zhu_ce.as_view(), name='register'),
url(r'^captcha/', include('captcha.urls'), name='captcha'),
url(r'^active/(?P<active_de>.*)/$', active_code.as_view(), name="user_active"), url(r'^login.html', TemplateView.as_view(template_name='login.html'), name='login'),
url(r'^deng_lu', deng_lu.as_view(), name='deng_lu'),
url(r'^logout', logout.as_view(), name='deng_lu'),
]
激活逻辑处理
class active_code(View):
def get(self, request, active_de):
yanzh_email = Email.objects.filter(code=active_de)
if yanzh_email:
for record in yanzh_email:
email = record.email
Users.objects.filter(username=email).update(is_active=True)
Email.objects.filter(code=active_de).delete()
return render(request, 'login.html')
找回密码等更能也是这个原理
第三百八十四节,Django+Xadmin打造上线标准的在线教育平台—路由映射与静态文件配置以及会员注册的更多相关文章
- 第三百八十八节,Django+Xadmin打造上线标准的在线教育平台—网站列表分页
第三百八十八节,Django+Xadmin打造上线标准的在线教育平台—网站列表分页 分页可以用一个第三方分页模块django-pure-pagination 下载地址:https://github.c ...
- 第三百八十三节,Django+Xadmin打造上线标准的在线教育平台—第三方模块django-simple-captcha验证码
第三百八十三节,Django+Xadmin打造上线标准的在线教育平台—第三方模块django-simple-captcha验证码 下载地址:https://github.com/mbi/django- ...
- 第三百七十八节,Django+Xadmin打造上线标准的在线教育平台—django自带的admin后台管理介绍
第三百七十八节,Django+Xadmin打造上线标准的在线教育平台—django自带的admin后台管理介绍 配置django的admin数据库管理后台 首先urls.py配置数据库后台路由映射,一 ...
- 第三百七十三节,Django+Xadmin打造上线标准的在线教育平台—创建用户app,在models.py文件生成3张表,用户表、验证码表、轮播图表
第三百七十三节,Django+Xadmin打造上线标准的在线教育平台—创建用户app,在models.py文件生成3张表,用户表.验证码表.轮播图表 创建Django项目 项目 settings.py ...
- 第三百八十节,Django+Xadmin打造上线标准的在线教育平台—将所有app下的models数据库表注册到xadmin后台管理
第三百八十节,Django+Xadmin打造上线标准的在线教育平台—将所有app下的models数据库表注册到xadmin后台管理 将一个app下的models数据库表注册到xadmin后台管理 重点 ...
- 第三百八十七节,Django+Xadmin打造上线标准的在线教育平台—网站上传资源的配置与显示
第三百八十七节,Django+Xadmin打造上线标准的在线教育平台—网站上传资源的配置与显示 首先了解一下static静态文件与上传资源的区别,static静态文件里面一般防止的我们网站样式的文件, ...
- 第三百八十五节,Django+Xadmin打造上线标准的在线教育平台—登录功能实现,回填数据以及错误提示html
第三百八十五节,Django+Xadmin打造上线标准的在线教育平台—登录功能实现 1,配置登录路由 from django.conf.urls import url, include # 导入dja ...
- 第三百八十九节,Django+Xadmin打造上线标准的在线教育平台—列表筛选结合分页
第三百八十九节,Django+Xadmin打造上线标准的在线教育平台—列表筛选结合分页 根据用户的筛选条件来结合分页 实现原理就是,当用户点击一个筛选条件时,通过get请求方式传参将筛选的id或者值, ...
- 第三百八十六节,Django+Xadmin打造上线标准的在线教育平台—HTML母版继承
第三百八十六节,Django+Xadmin打造上线标准的在线教育平台—HTML母版继承 母板-子板-母板继承 母板继承就是访问的页面继承一个母板,将访问页面的内容引入到母板里指定的地方,组合成一个新页 ...
随机推荐
- SQL server 存储过程实现统计赋值
@EmptyCount int output 参数 declare @strCount nvarchar(max); 声明变量 取值语句: set @strCount='select @Count= ...
- iOS-通讯录(无界面)
通讯录(无界面) #import "AppDelegate.h" #import <AddressBook/AddressBook.h> @interface AppD ...
- android category
本章节翻译自<Beginning-Android-4-Application-Development>,如有翻译不当的地方,敬请指出. 原书购买地址http://www.amazon.co ...
- spark on alluxio和MR on alluxio测试(改进版)【转】
转自:http://kaimingwan.com/post/alluxio/spark-on-alluxiohe-mr-on-alluxioce-shi-gai-jin-ban 1. 介绍 2. 准备 ...
- 安装Python2.7出现configure: error: no acceptable C compiler found in $PATH错误
安装Python2.7出现configure: error: no acceptable C compiler found in $PATH错误 安装步骤: 安装依赖 yum groupinstall ...
- 常用的 Linux iptables 规则
一些常用的 Linux iptables 规则,请根据自己的具体需要再修改. 转载自:http://mp.weixin.qq.com/s/uAPzh9_D4Qk6a3zBh7Jq5A # 1. 删除所 ...
- 移动web开发(三)——字体使用
参考: 移动web页面使用字体的思考.http://www.cnblogs.com/PeunZhang/p/3592096.html
- 1. EM算法-数学基础
1. EM算法-数学基础 2. EM算法-原理详解 3. EM算法-高斯混合模型GMM 4. EM算法-高斯混合模型GMM详细代码实现 5. EM算法-高斯混合模型GMM+Lasso 1. 凸函数 通 ...
- jquery开发的数字相加游戏(你能玩几分)
jquery开发的数字相加游戏,我在一轮中玩了632分(如下图),你能玩几分,哈哈... 我要试一试 下面贡献下这款“数字相加游戏”的开发过程. html部分: <div class=" ...
- Go Revel - Routing(路由)
`Routing`路由控制着请求应该由哪些控制器接受. 它在项目的`conf/routes`文件中定义. 格式为: (METHOD) (URL Pattern) (Controller.Action) ...