第三章 天天生鲜项目实现注册异步收发功能

第三章 天天生鲜项目实现注册异步收发功能


学习入门指南:

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

本文博客获取关键词:天天生鲜注册异步收发博客

本项目关键词:天天生鲜注册异步收发源码

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

QQ群号:301666877

天天生鲜项目学习视频

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

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



本文主要内容:实现注册异步收发功能

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


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

章节目录

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

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

第三章、天天生鲜注册异步收发


第一步 代码入场

1、新建python包,然后在里面新建一个python文件celery_tasks.py,然后在里面导入如下内容:

#使用celery
from django.core.mail import send_mail
from django.conf import settings
from celery import Celery
import time

# 这个在任务处理者一端加入代码,也就是Linux下的该文档加下面的代码
# import os
# import django
# os.environ.setdefault("DJANGO_SETTINGS_MODULE","dailyfresh.settings")
# django.setup


#创建一个Celery类的实例对象
app=Celery('celery_tasks.tasks',broker='redis://192.168.23.150:6379/8')

#定义任务函数
@app.task
def send_register_active_email(to_email, username, token):
    "'发送激活邮件'"
    #组织邮件信息
    subject = '天天生鲜欢迎信息'
    message = '欢迎注册'
    sender = settings.EMAIL_FROM  # 发件人
    receiver = [to_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)

2、在/user/views.py中使用如下内容,直接空白导入,不用刻意的去加,把之前的全部删了,把这个放进去就ok

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 celery_tasks.tasks import send_register_active_email                   #导入发送邮件函数
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': '数据不完整'})
        # 检验邮箱
        re.match(r'^[a-z0-9][\w.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$', email)
        # 如果不是一个邮箱,即邮箱形式不合法
        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.objects.get(username=username)
        except User.DoesNotExist:
            User.username = None
        if User.username:
            # 用户名已存在
            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()            #进行字节解码

        #发邮件
        #出现阻塞暂时无法解决,故采用下面的函数
        send_register_active_email.delay(email, username, token)
        #send_register_active_email(email, username, token)      #上面那个函数发生组赛了,用我
         # 返回应答,跳转到index
        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('激活链接已过期')

第二步、一些插件的安装

异步收发,两边都要安装插件celery:

# 第一步 ,在pycharm中安装插件celery
pip install celery
# 第二步 ,在pycharm中安装redis
pip install django-redis

linux与windows下共享文件夹设置

首先在Windows随便建个文件夹并命名,我把它命名为share,然后打开虚拟机的设置,然后点选项,启用共享文件夹,添加我们建立的目录,然后到linux下终端输入如下信息

# 第一步 打开共享文件夹
cd /mnt/hgfs/
# 第二步 把我们需要的文件放进共享文件夹
#第三步 查看共享文件夹是否有内容
ls
#第四步 把共享文件夹中的内容复制到我们想要的目录下
sudo cp -r /mnt/hgfs/share/dailyfresh_version1/ /home/lyj/桌面

# 删除一个空目录
sudo rmdir 文件名
sudo rm -rf 文件名				# 删除一个非空目录

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;
第三步 一些环境的配置

我们在linux下配置环境

redis的安装

这里我下载的是当前最新版本6.2.1,首先进入官网,找到网址,然后

wget http://download****

解压包

tar -zxvf redis-6.2.1.tar.gz

将包移动到安装目录下

sudo mv ./redis-6.2.1 /usr/local/redis

进入redis文件夹

cd /usr/local/redis/redis-6.2.1

生成

sudo make

测试

sudo make test

安装,将redis的命令安装到//bin目录

sudo make install

安装完成后,进入目录/usr/bin查看

cd /usr/local/bin
ls

配置文件,移动到/etc/目录下

sudo cp /usr/local/redis/redis.conf /etc/redis/

如果没有redis目录,使用下面指令创建目录

sudo mkdir redis
redis的配置

IP地址默认为127.0.0.1,端口默认6379

需要将守护进程运行的参数daemonize改为yes(默认为no)

启动的redis命令指令以及杀死指令以上面安装方法安装为准

1、启动服务端

sudo redis-server /etc/redis/redis.conf 

2、查看redis是否启动

ps aux | grep redis

3、结束redis服务的运行

sudo kill -9 PID

4、连接redis

redis-cli

查看是否连接成功可以输入ping,则会回复pong(表示连接成功)

5、切换数据库(默认0)

select 5
select 0				# 返回默认数据库

6、redis为了实现与python以及后面的布局需要做的一些配置

pip install redis				# 安装reids插件,使得redis可以和python交互

7、redis_redis存储和session信息的配置

django存储session需要做的一些配置

pip install django-redis-sessions		#安装session的redis存储配置包

配置主从服务的主服务,也就是把redis放在虚拟机的linux上,然后Django在windows下跑

首先需要把ip地址换一下,不能使用默认的127.0.0.1,把她换成ifconfig命令下的IP地址,怎么更换呢?

#修改/etc/redis/redis.conf文件
sudo vim /etc/redis/redis.conf
bind 192.168.26.128			#这个把原来的127.0.0.1注释,然后换成ifconfig下的配置文件
# 把daemonize改为yes
demonize yes
#****************************************************************************
# 重启redis服务
sudo service reids stop
redis-server /etc/redis/redis.conf
第四步 基本操作
# 第一步,在虚拟机中启动celery
celery -A celery_tasks.tasks worker -l info 


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值