当前位置: 首页 > Linux

Django20200424博客开发025

时间:2023-04-06 21:35:36 Linux

如图,点击修改昵称或者绑定邮箱或者修改密码,可以进行相应的操作:首先点击这些按钮,会弹出一个表单,在user/forms中新建一个表单。py:CharngeNicknameFomr类类ChangeNicknameForm(forms.Form):nickname_new=forms.CharField(label='newnickname',max_length=20,widget=forms.TextInput(attrs={'class':'form-control','placeholder':'Pleaseenteranewnickname'}))def__init__(self,*args,**kwargs):if'user'inkwargs:self.user=kwargs.pop('user')super(ChangeNicknameForm,self)。')返回self.cleaned_datadefclean_nickname_new(self):nickname_new=self.cleaned_data.get('nickname_new','').strip()ifnickname_new=='':raiseforms.ValidationError("新昵称不能为空")returnnickname_new然后user/views将上面定义的表单引入.py,确定新的处理方法:change_nickname:from.formsimportLoginForm,RegForm,ChangeNicknameFormfrom.modelsimportProfiledefchange_nickname(request):redirect_to=request.GET.get('from',reverse('home'))ifrequest.method=='POST':form=ChangeNicknameForm(request.POST,user=request.user)ifform.is_valid():nickname_new=form.cleaned_data['nickname_new']个人资料,已创建=Profile.objects.get_or_create(user=request。user)profile.nickname=nickname_newprofile.save()returnredirect(redirect_to)else:form=changenicknameform()context={}context={'page_title']='修改修改修改'context['form_title'form_title']context['submit_text']='修改'context['form']=formcontext['return_back_url']=redirect_toreturnrender(request,'form.html',context)配置对应的路径由:user/rils.py中:创建对应的form.html在公共模板中{%extends'base.html'%}{%blocktitle%}{{page_title}}{%endblock%}{%blocknav_home_active%}active{%endblock%}{%blockcontent%}{{form_title}}{{field.label}}}{%endif%}{{field}}{field.errors.erors.erors.as_text}}}

{%endfor%}{{form.non_field_errors}}
{%blockother_buttons%}{%endblock%}
{%endblock%}修改usr_Info.html中的昵称:
  • 昵称:{{user.get_nickname}}修改昵称
  • 添加返回按钮:在form.html中修改,然后在user/views.py中将数据传给前端:将两个按钮放在一起:效果在form.html中:另外,如果created如果用户没有昵称,user\_info.html中的user.profile.nickname将无法获取内容。错误:在user/models.py中创建一个get\_nickname方法,然后调用这个方法给User赋值。如果有直接赋值,则不创建。在user/modelspy中创建has\_nickname方法,赋值给User:然后在base.html中写这个方法:注释,如果有昵称,要显示昵称:修改如下:在user/models中。py中添加get\_nicknam\_or\_username:将blog\_detail.html中部分用户名改成:get\_nickname\_or\_username,同时把comment/views.py中的username改成get\_nickname\_or\_username:绑定邮箱:在user/forms.py中创建一个BindEmailForm表单,用作电子邮件表单classBindEmailForm(forms.Form):email=forms.EmailField(label='mailbox',widget=forms.EmailInput('class':'form-control','placeholder':'请输入正确的邮箱地址'})))verification_code=forms.CharField(label='验证码',required=False,widget=forms.TextInput(attrs={'class':'form-control','placeholder':'点击“发送验证码”发送到邮箱'}))def__init__(self,*args,**kwargs):if'request'inkwargs:self.request=kwargs.pop('request')super(BindEmailForm,self).__init__(*args,**kwargs)defclean(self):#判断用户是否登录userif.self.reis_authenticated:self.cleaned_data['user']=self.request.userelse:raiseforms.ValidationError('Userhasnotloggedin')#判断用户是否绑定邮箱ifself.request.user.email:!=''raiseforms.ValidationError('Youhaveboundemail')#判断验证码code=self.request.session.get('bind_email_code','')verification_code=self.cleaned_data.get('verification_code','')如果不是(code!=''andcode==verification_code):raiseforms.ValidationError('verificationcodeisincorrect')returnself.cleaned_datadefclean_email(self):email=self.cleaned_data['email']我fUser.objects.filter(email=email).exists():raiseforms.ValidationError('该邮箱已被绑定')返回电子邮件defclean_verification_code(self):verification_code=self.cleaned_data.get('verification_code','').strip()ifverification_code=='':raiseforms.ValidationError('验证码不能为空')在用户/views.py中创建bind_email函数:fromdjango.core.mailimportsend_mailfrom.formsimportLoginForm,RegForm,ChangeNicknameForm,BindEmailFormdefbind_email(request):redirect_to=request.GET.get('from',reverse('home'))ifrequest.method=='POST':form=BindEmailForm(request.POST,request=request)ifform.is_valid():email=form.cleaned_data['email']request.user.email=emailrequest.user.save()返回重定向(redirect_to)elseelse被被重定向的}context['page_title']='绑定邮箱'context['form_title']='BindEmail'context['submit_text']='Bind'context['form']=formcontext['return_back_url']=redirect_toreturnrender(request,'user/bind_email.html',context)user添加路由在/urls.py中:在user/user_info.html中添加邮件内容:然后查看效果:在新建的bind\_email.html中添加发送验证码按钮,同时修改form.html文件:添加绑定\_电子邮件。html在user/templates/user中的效果:然后添加发送地址和添加样式(在bind\_email.html中):在user/views.py中也添加一个send_verification_code函数来发送邮件:首先导入需要的模块:importstringimportrandomimporttimefromdjango.core.mailimportsend_mail在settings.py中设置邮件发送配置打开地址:配置发送邮件的路由:user/urls.py:尝试发送邮件:添加绑定功能:上面已经一起实现了效果图:但是当前发送验证码是可以连续发送的,会增加服务器的压力,所以需要把按钮置灰,然后功能不可用,开始倒计时:在后端,也让发件人发完一封邮件后,关闭通知发邮件的端口(因为可以绕过前端,直接操作后端:前端是不可信的):绑定邮箱的功能还没有实现,还需要继续