30django实战第30天:修改邮箱和用户信息

何波安的博客 何波安的博客     2022-10-28     424

关键词:

修改个人邮箱需要完成两个接口,一个是获取验证码,一个是新的邮箱和验证码是否匹配

1、编辑users.views.py

class SendEmailCodeView(LoginRequiredMixin, View):
    def get(self, request):
        email = request.GET.get(\'email\', \'\')
        if UserProfile.objects.filter(email=email):
            return HttpResponse(\'"email":"该邮箱已被注册"\', content_type=\'application/json\')
        sendEmail(email, \'hmail\')
        return HttpResponse(\'"status":"success"\', content_type=\'application/json\')

2、编辑users.urls.py

from .views import SendEmailCodeView

urlpatterns = [
    ...
    url(r\'sendemail_code/$\', SendEmailCodeView.as_view(), name=\'sendemail_code\'),
]

3、编辑utils.email_send.py

from random import Random
from django.core.mail import send_mail
from users.models import  EmailVerifyRecord
from mxonline.settings import EMAIL_FROM


def random_str(randomlenght=8):
    str = \'\'
    chars = \'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789\'
    length = len(chars) - 1
    random = Random()
    for i in range(randomlenght):
        str += chars[random.randint(0, length)]
    return str


def sendEmail(email, send_type=\'register\'):
    email_record = EmailVerifyRecord()
    if send_type == \'hmail\':
        code = random_str(4)
    else:
        code = random_str(16)
    email_record.code = code
    email_record.email = email
    email_record.send_type = send_type
    email_record.save()

    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, EMAIL_FROM, [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, EMAIL_FROM, [email])
        if send_status:
            pass

    elif send_type == \'hmail\':
        email_title = \'慕学在线网修改邮箱\'
        email_body = \'您的邮箱验证为:0\'.format(code)
        send_status = send_mail(email_title, email_body, EMAIL_FROM, [email])
        if send_status:
            pass

4、编辑usercenter-base.html

5、编辑deco-user.js

 现在输入新邮箱,点击获取验证码,邮箱就能收到邮件了

现在我们来完成另外一个接口,验证验证码

编辑users.views.py

class UpdateEmailView(LoginRequiredMixin, View):
    def post(self, request):
        email = request.POST.get(\'email\', \'\')
        code = request.POST.get(\'code\', \'\')

        existed_records = EmailVerifyRecord.objects.filter(email=email, code=code, send_type=\'hmail\')
        if existed_records:
            user = request.user
            user.email = email
            user.username = email
            user.save()
            return HttpResponse(\'"status":"success"\', content_type=\'application/json\')
        else:
            return HttpResponse(\'"email":"验证码错误"\', content_type=\'application/json\')

编辑users.urls.py

...
from .views import UpdateEmailView

urlpatterns = [
   ...
    url(r\'update_email/$\', UpdateEmailView.as_view(), name=\'update_email\'),
]

编辑 deco-user.js

 现在输入验证码,就可以完成邮箱修改了

 

最后我们来完成用户信息的提交

我们之前定义了UserInfoView使用了get方法来显示,现在我们可以定义post方法完成用户信息的提交

编辑users.forms.py对提交的数据进行验证

class UserInfoForm(forms.ModelForm):
    class Meta:
        model = UserProfile
        fields = [\'nick_name\', \'gender\', \'birthday\', \'address\', \'mobile\']
        # 因为头像、密码、邮箱是单独修改的,这里就不取出来

编辑users.view.py

...
from .forms import UserInfoForm

class UserInfoView(LoginRequiredMixin, View):
    def get(self, request):
        return render(request, \'usercenter-info.html\', )

    def post(self, request):
        user_info_form = UserInfoForm(request.POST, instance=request.user)
        if user_info_form.is_valid():
            user_info_form.save()
            return HttpResponse(\'"status":"success"\', content_type=\'application/json\')
        else:
            return HttpResponse(json.dumps(user_info_form.errors), content_type=\'application/json\')  

编辑usercenter-info.html

编辑 deco-user.js

 

28django实战第28天:个人信息展示

从今天开始,我来完成个人中心部分,前端页面如下1、浏览这些页面可以发现,它们和base.html是有区别的,因此,它们需要新建一个模板usercenter-base.html2、把usercenter-info.html的内容拷贝到usercenter-base.html,用block把会不同的部分... 查看详情

30天python入门到进阶——第3天:数据类型(ⅱ)

...它允许我们动态更新字符串内容。假设我们从服务器获取用户信息,并希望根据该信息显示自定义消息。第一个想法是应用字符串连接,例如:first_name=Tomlast_name=Cruisewelcome_message="Welcome"+""+firs 查看详情

30日留存率怎么写

首发于数据驱动游戏SQL数据分析实战(五):计算留存率128人赞同了该文章关于留存率和LTV的计算,是很多家游戏公司大厂的笔试题目之一。前面有读者跟我反映近期写的几篇文章太硬核了,快要掉粉了。我非常了解你们的心情... 查看详情

exchangeserver2016管理系列课件30.查询邮箱的登录创建信息

...)梳理当前环境中哪些用户配置了完全访问的权限(公共邮箱);获取可以使用的属性Get-Mailbox-Identityuser3|Get-Member查询所有邮箱并筛选排序注意:下面的高级查询功能,如果查询不出正常的结果,建议重启Exchange2016RTM服务器。按... 查看详情

29flask实战第29天:cms用户名渲染和注销功能实现(代码片段)

这节来完成用户名渲染和注销的功能,目前用户名在前端页面是写死的,我们需要动态的展示出来用户名渲染实现用户名动态展示,其中一种方法就是在视图函数,根据session信息,获取到userid,通过该id找到用户信息,再通过模... 查看详情

检查日期是不是存在(第 30 天/第 31 天)[重复]

】检查日期是不是存在(第30天/第31天)[重复]【英文标题】:CheckwhethertheDateexists(30th/31thday)[duplicate]检查日期是否存在(第30天/第31天)[重复]【发布时间】:2017-02-0900:49:49【问题描述】:如何检查一个月的第30天或第31天是否存... 查看详情

6_30天自制操作系统第6天心得体会

...理。像这样分出来的块,就叫做段。表示一个段所需要的信息:段的大小,段的起始地址,段的管理属性(禁止写入,禁止执行,系统专用等)CPU用8个字节来表示这些信息。我们可以分成8192个段,段号是0-8191. 查看详情

第30天sql进阶-查询优化-performance_schema系列实战五:查看最近的事务执行信息(sql小虚竹)(代码片段)

回城传送–》《32天SQL筑基》文章目录零、前言一、查看最近的事务执行信息数据准备(如果已有数据可跳过此操作)开启第一个会话,配置启用事务事件开启第二个会话,用于执行事务,并模拟事务回滚第一... 查看详情

17django实战第17天:机构详情展示

1、进入xadmin添加测试数据(教师、课程)2、把以下4个前端页面复制到templates中先打开这几个页面分析,它们和之前的课程机构列表页是不一样的机构,且没有共同的部分,但是这4个页面却是类似的  查看详情

100天精通oracle-实战系列(第23天)oracle数据泵用户导出导入(代码片段)

Oracle数据泵用户导出导入->返回总目录<-介绍PS:有日子没写东西了,忙的屁股都找不到了,今天找到了,写一篇,没断更,对不住大家了…数据泵用户的导出导入并不难,相信大家也都会,这里我主要讲一些大家可能不知道... 查看详情

我的 django 模型 DateField 如何将 30 天添加到提供的值?

】我的django模型DateField如何将30天添加到提供的值?【英文标题】:HowcanmydjangomodelDateFieldadd30daystotheprovidedvalue?【发布时间】:2011-01-1300:42:54【问题描述】:正如标题所示。我想在DateField字段中添加30天。这是使用auto_now_add=True创... 查看详情

php 数据库 - 为每个用户存储 30 天的数据

】php数据库-为每个用户存储30天的数据【英文标题】:phpdatabase-storing30daysofdataforeachuser【发布时间】:2013-03-2918:38:02【问题描述】:我正在尝试建立一个数据库来记录每个用户最近30天的信息。数据将每天记录一次(即通过cron作... 查看详情

简洁易懂,初学者挑战学习python编程30天(代码片段)

....2创建对象21.3类构造函数21.4对象方法21.5对象默认方法21.6修改类默认值的方法21.7继承21.8Overridingparentmethod第22天-网页抓取22.1什么是网页抓取第23天-虚拟环境23.1设置虚拟环境第24天-统计24.1统计数据24.2什么是数据?24.3统计模... 查看详情

13django实战第13天:分页列表功能

我们看课程机构列表页是需要分页的为了完成分页功能,我们需要用到Django的一个开源开发库django-pure-paginationworkonmxonlinepipinstalldjango-pure-pagination   查看详情

30天python入门到进阶——第6天:循环和函数

编写Python代码的乐趣应该在于看到简短、简洁、可读的类,这些类用少量清晰的代码表达了很多动作——而不是大量让读者厌烦的琐碎代码。接着上一节的内容继续,我们继续探索Python的流程控制--循环,并去尝试他们实现循环... 查看详情

15django实战第15天:我要学习咨询

今天完成的是课程机构列表页面的最后一个模块:我要学习我们在models中创建对应的表时UserAsk。之前我们讲过:在做表单的时候,我们可以通过forms先对提交的数据做一次 查看详情

22django实战第22天:课程评论

1、编辑course-comment.html2、编辑courses.views.pyclassCourseCommentView(LoginRequiredMixin,View):defget(self,request,course_id):course=Course.objects.get(id=course_id)returnrender(request,‘course-comment.ht 查看详情

100天精通oracle-实战系列(第9天)sqlplus基础使用和进阶玩法

SQLPlus基础使用和进阶玩法(第9天)->返回总目录<-SQLPlus是进行Oracle操作的主要前台工具,用户名和密码分别为用户名和密码,用于连接ORACLE数据库。SQLPlus是一个交互式批处理查询工具,随每个Oracle数据库安装一起安装。它... 查看详情