第三百八十四节,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打造上线标准的在线教育平台—路由映射与静态文件配置以及会员注册的更多相关文章

  1. 第三百八十八节,Django+Xadmin打造上线标准的在线教育平台—网站列表分页

    第三百八十八节,Django+Xadmin打造上线标准的在线教育平台—网站列表分页 分页可以用一个第三方分页模块django-pure-pagination 下载地址:https://github.c ...

  2. 第三百八十三节,Django+Xadmin打造上线标准的在线教育平台—第三方模块django-simple-captcha验证码

    第三百八十三节,Django+Xadmin打造上线标准的在线教育平台—第三方模块django-simple-captcha验证码 下载地址:https://github.com/mbi/django- ...

  3. 第三百七十八节,Django+Xadmin打造上线标准的在线教育平台—django自带的admin后台管理介绍

    第三百七十八节,Django+Xadmin打造上线标准的在线教育平台—django自带的admin后台管理介绍 配置django的admin数据库管理后台 首先urls.py配置数据库后台路由映射,一 ...

  4. 第三百七十三节,Django+Xadmin打造上线标准的在线教育平台—创建用户app,在models.py文件生成3张表,用户表、验证码表、轮播图表

    第三百七十三节,Django+Xadmin打造上线标准的在线教育平台—创建用户app,在models.py文件生成3张表,用户表.验证码表.轮播图表 创建Django项目 项目 settings.py ...

  5. 第三百八十节,Django+Xadmin打造上线标准的在线教育平台—将所有app下的models数据库表注册到xadmin后台管理

    第三百八十节,Django+Xadmin打造上线标准的在线教育平台—将所有app下的models数据库表注册到xadmin后台管理 将一个app下的models数据库表注册到xadmin后台管理 重点 ...

  6. 第三百八十七节,Django+Xadmin打造上线标准的在线教育平台—网站上传资源的配置与显示

    第三百八十七节,Django+Xadmin打造上线标准的在线教育平台—网站上传资源的配置与显示 首先了解一下static静态文件与上传资源的区别,static静态文件里面一般防止的我们网站样式的文件, ...

  7. 第三百八十五节,Django+Xadmin打造上线标准的在线教育平台—登录功能实现,回填数据以及错误提示html

    第三百八十五节,Django+Xadmin打造上线标准的在线教育平台—登录功能实现 1,配置登录路由 from django.conf.urls import url, include # 导入dja ...

  8. 第三百八十九节,Django+Xadmin打造上线标准的在线教育平台—列表筛选结合分页

    第三百八十九节,Django+Xadmin打造上线标准的在线教育平台—列表筛选结合分页 根据用户的筛选条件来结合分页 实现原理就是,当用户点击一个筛选条件时,通过get请求方式传参将筛选的id或者值, ...

  9. 第三百八十六节,Django+Xadmin打造上线标准的在线教育平台—HTML母版继承

    第三百八十六节,Django+Xadmin打造上线标准的在线教育平台—HTML母版继承 母板-子板-母板继承 母板继承就是访问的页面继承一个母板,将访问页面的内容引入到母板里指定的地方,组合成一个新页 ...

随机推荐

  1. 菜鸟学数据库(六)——方便快捷的开启、关闭Oracle服务

    背景: 作为一个程序员,在日常的工作中,我们电脑经常需要同时运行很多程序,如:Eclipse.浏览器.即时通讯软件等,甚至经常需要打开几个Office文档或者pdf文档.这时候你的内存估计已经爆表了吧 ...

  2. .NET MVC EF框架数据库连接配置

    1:数据库的配置和连接 Web.config <connectionStrings> <add name="SQLConnectionString" connec ...

  3. 如何使用ILSpy 把发布版本反编译成源码

    有时候,看法别人写的代码比较好,想看看他们的代码到底是如何写的,于是就找方法,看看能否把发布版本变成源码.后来终于发现一个词“反编译”,我终于知道怎么办了. 工具:ILSpy   百度下载一个,该工具 ...

  4. 用户手势检测-GestureDetector使用详解

    一.概述 当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等等. 一般情况下,我们知道View类有个View.OnTouchListener内部接口,通过重写他的o ...

  5. 【Android】事件处理系统

    linux输入子系统 Android是linux内核的,所以它的事件处理系统也在linux的基础上完成的. Linux内核提供了一个Input子系统来实现的,Input子系统会在/dev/input/ ...

  6. 【C/C++】C语言复习笔记-17种小算法-解决实际问题

    判断日期为一年中的第几天(考虑闰年) /* * 计算该日在本年中是第几天,注意闰年问题 * 以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天 * 特殊情况,闰年且输入月份大于3时 ...

  7. Python3将两个有序数组合并为一个有序数组

    [本文出自天外归云的博客园] 第一种思路,把两个数组合为一个数组然后再排序,问题又回归到冒泡和快排了,没有用到两个数组的有序性.(不好) 第二种思路,循环比较两个有序数组头位元素的大小,并把头元素放到 ...

  8. 利用 fdisk进行分区

    ):fdisk命令参数 p:打印分区表. n:新建一个新分区. d:删除一个新分区. q:退出不保存. w:退出且保存. 例子: 先看下磁盘: root@archiso ~ # lsblk 在这里对磁 ...

  9. Android实例-获取屏幕的物理分辨率

    相关资料: http://blog.qdac.cc/?p=1161 实例代码: unit Unit1; interface uses System.SysUtils, System.Types, Sy ...

  10. 基于jquery结婚电子请柬特效素材

    分享基于jquery结婚电子请柬特效素材总共包含3个部分,第一部分是开着小轿车缓缓进入场景,第二部分是相册,第三部分是祝福墙.效果图如下: 在线预览   源码下载 实现的代码. html代码: < ...