第二章、天天生鲜注册功能基本实现

第二章 天天生鲜项目实现基本功能


学习入门指南:

天天生鲜项目搭建文件可从公众号学聚思获取,关注公众号:学聚思、学聚思、学聚思。重要的事情说三遍

本文博客获取关键词:天天生鲜注册实现博客

本项目关键词:天天生鲜注册实现源码

请大家按照关键字搜索哦,另外,本人创建了1个QQ群欢迎各位加入讨论

QQ群号:301666877

天天生鲜项目学习视频

另外如果需要其他资源,比如视频中的工程文档,欢迎公众号留言

本内容持续更新直至天天生鲜项目完成!



本文主要内容:实现注册基本逻辑

本设计不涉及中间过程,直接上手最后的功能,所以自己对着视频分模块学习,把这个整个模块学习完再导入下面的代码


本文中用到的Django的一些说明书

类试图使用手册


章节目录

第一章、天天生鲜项目框架搭建

第二章、天天生鲜注册功能实现


第一步

首先将static文件夹下面的register.html复制到templates中,由于CSS文件以及js文件与其不在同一路径,我们需要将头文件做如下改变

# 将头部文件做如下改变   PS:这个注释最好不要复制进去
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
{% load static %}
<head>
	<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
	<title>天天生鲜-注册</title>
	<link rel="stylesheet" type="text/css" href="{% static 'css/reset.css' %}">
	<link rel="stylesheet" type="text/css" href="{% static 'css/main.css' %}">
	<script type="text/javascript" src="{% static js/jquery-1.12.4.min.js %}"></script>
	<script type="text/javascript" src="{% static 'js/register.js' %}"></script>
</head>

另外,如果前端代码中,存在图片连接,由于图片存放在static中,因此图片也需要做如下改变,只要是图片连接都要做这种改变

<a class="reg_logo"><img src="{% static 'images/logo02.png' %}"></a>

最后我们的前端页面register.html中的是这样的,当然中间还存在很多改变,自己看视频,防止敲错,直接复制即可

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
{% load static %}
<head>
	<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
	<title>天天生鲜-注册</title>
	<link rel="stylesheet" type="text/css" href="{% static 'css/reset.css' %}">
	<link rel="stylesheet" type="text/css" href="{% static 'css/main.css' %}">
	<script type="text/javascript" src="{% static 'js/jquery-1.12.4.min.js' %}"></script>
	<script type="text/javascript" src="{% static 'js/register.js' %}"></script>
</head>
<body>
	<div class="register_con">
		<div class="l_con fl">
			<a class="reg_logo"><a class="reg_logo"><img src="{% static 'images/logo02.png' %}"></a></a>
			<div class="reg_slogan">足不出户  ·  新鲜每一天</div>
			<div class="reg_banner"></div>
		</div>

		<div class="r_con fr">
			<div class="reg_title clearfix">
				<h1>用户注册</h1>
				<a href="#">登录</a>
			</div>
			<div class="reg_form clearfix">
				<form method="post" action="/user/register">
					{% csrf_token %}
				<ul>
					<li>
						<label>用户名:</label>
						<input type="text" name="user_name" id="user_name">
						<span class="error_tip">提示信息</span>
					</li>					
					<li>
						<label>密码:</label>
						<input type="password" name="pwd" id="pwd">
						<span class="error_tip">提示信息</span>
					</li>
					<li>
						<label>确认密码:</label>
						<input type="password" name="cpwd" id="cpwd">
						<span class="error_tip">提示信息</span>
					</li>
					<li>
						<label>邮箱:</label>
						<input type="text" name="email" id="email">
						<span class="error_tip">提示信息</span>
					</li>
					<li class="agreement">
						<input type="checkbox" name="allow" id="allow" checked="checked">
						<label>同意”天天生鲜用户使用协议“</label>
						<span class="error_tip2">提示信息</span>
					</li>
					<li class="reg_sub">
						<input type="submit" value="注 册" name="">
					</li>
				</ul>				
				</form>
			</div>

		</div>

	</div>

	<div class="footer no-mp">
		<div class="foot_link">
			<a href="#">关于我们</a>
			<span>|</span>
			<a href="#">联系我们</a>
			<span>|</span>
			<a href="#">招聘人才</a>
			<span>|</span>
			<a href="#">友情链接</a>		
		</div>
		<p>CopyRight © 2016 北京天天生鲜信息技术有限公司 All Rights Reserved</p>
		<p>电话:010-****888    京ICP备*******8号</p>
	</div>
	
</body>
</html>

然后再user/views.py中添加如下代码

from django.shortcuts import render,redirect
from django.urls import reverse        #反向解析函数
from django.core.mail import send_mail      #导入发送邮件函数
from django.views.generic import View   #导入类视图
from django.http import HttpResponse
from django.conf import settings

from user.models import User
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer      #导入用于用户信息加密的插件并且给它取个别名为Serializer
from itsdangerous import SignatureExpired                                   #导入异常



import re                                                                   #导入正则匹配模块用于检验邮箱



# Create your views here.

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()

        #发送激活邮件,包含激活链接:
        #激活连接中需要包含用户的身份信息,并且要把身份信息进行加密

        #加密用户的身份信息,生成激活token
        serializer=Serializer(settings.SECRET_KEY,3600)
        info={'confirm':user.id}
        token=serializer.dumps(info)    #返回的是字节
        token=token.decode()            #进行字节解码

        # 组织邮件信息
        subject = '天天生鲜欢迎信息'
        message = '欢迎注册'
        sender = settings.EMAIL_FROM  # 发件人
        receiver = [email]
        html_message = '<h1>%s欢迎您成为为天天生鲜交易市场注册会员</h1>请点击下面链接激活您的账户<br/><a href="http://127.0.0.1:8000/user/active/%s">http://127.0.0.1:8000/user/active/%s</a>' % (username, token, token)
        send_mail(subject, message, sender, receiver, html_message=html_message)

        # 返回应答,跳转到首页
        return redirect(reverse('goods:index'))


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('激活链接已过期')

然后在user/urls.py中添加如下内容太

from django.urls import path,re_path
from user.views import RegisterView,ActiveView

urlpatterns = [
   path('register',RegisterView.as_view(),name='register'),     #注册
   re_path('active/(?P<token>.*)$',ActiveView.as_view(),name='active'),    #用户激活

]

由于可能用到首页,所以在goods/urls.py中添加如下内容:

from django.urls import path
from goods import views


urlpatterns = [
    path('',views.index,name='index'),      #首页
]

在goods/views.py中添加如下内容

from django.shortcuts import render

# Create your views here.
def index(request):
    "'首页'"
    return render(request,'index.html')
第二步、一些插件的安装

发送邮件时,为了对有些链接进行加密,我们需要安装加密插件"itsdangerous",直接运行:

pip install itsdangerous		#第一步安装插件
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer	#第二步 在user/views.py导入这个
# 第三步,在settings中做如下配置,记得看视频改成自己的邮箱配置啊!

# 发送邮件配置 
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
# smpt服务地址
EMAIL_HOST = 'smtp.163.com'
EMAIL_PORT = 25
# 发送邮件的邮箱
EMAIL_HOST_USER = 'smartli_it@163.com'
# 在邮箱中设置的客户端授权密码
EMAIL_HOST_PASSWORD = 'smartli123'
# 收件人看到的发件人
EMAIL_FROM = '天天生鲜<smartli_it@163.com>'


mysql数据库应用小技巧

# 1、如何删除数据库中某个表中的数据,比如从df_user表中删除id=1的用户
delete from df_user where id=1
# 2、查看df_user表中的全部数据
select * from df_user;
select * from df_user \G;			#这个可以让数据一行行的展示
# 3、如何查看表的结构,比如df_user表
desc df_user;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值