{{ v.name }}
{{ v.cls }}类
{{ v.price }} ¥{{ v.price }}
djangourlname详解
以后所有写成相对路径
#模板中添加声明{%loadstaticfiles%}#添加方法,如此以来,即使修改了static的路径也不会修改,因为引用的是相对路径
下载连接-github
文档说明
installation1、installdjango-simple-captchaviapip:pipinstalldjango-simple-captcha2、addcaptchatotheinstalled_appsinyoursettings.py3、runpythonmanage.pymigrate4、addanentrytoyoururls.py:
urlpatterns+=[url(r'^captcha/',include('captcha.urls')),]添加验证吗在app.form中建立register_form表单,定义好注册需要的字段(form可自动生成input框)【form实现了后台与前端的交互】
classregisterform(forms.form):email=forms.emailfield(required=true)password=forms.charfield(required=true,min_length=5)captcha=captchafield()将form加入registerview视图中,并将form数据传入template中
classregisterview(view):defget(self,request):register_form=registerform()returnrender(request,'register.html',{'register_form':register_form})#将register_form数据传递给template通过template将register_form传入html中,生成验证码(form数据可通过template自动生成input框)
classregisterview(view):defget(self,request):register_form=registerform()returnrender(request,'register.html',{'register_form':register_form})#将register_form数据传递给templatedefpost(self,request):register_form=registerform(request.post)#将post上来的数据传递给registerformifregister_form.is_valid():#上传的数据符合form表要求,有效user_name=request.post.get('username','')ifuserprofile.objects.filter(email=user_name):returnrender(request,'register.html',{'register_form':register_form,'msg':'用户已存在'})#该逻辑用户判断用户是否已注册存在pass_word=request.post.get('password','')user_profile=userprofile()user_profile.username=user_nameuser_profile.email=user_name#明文数据需要经过加密后传入数据库,利用make_password方法加密user_profile.password=make_password(pass_word)user_profile.save()else:returnrender(request,'register.html',{'register_form':register_form})#将register_form数据传递给template注意html中相同的、多余的input会影响文本输出将value传回template中
fromusers.modelsimportemailverifycodefromrandomimportrandomfromdjango.core.mailimportsend_mailfromgmooc.settingsimportemail_host,email_port,email_host_user,email_host_password,email_use_tls,email_from用于生成随机生成验证吗,长度可调
#随机生成验证吗,长度可调defrandom_str(random_length=8):code=''chars='abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz1234567890'random=random()length=len(chars)-1foriinrandom_length:code+=chars[random.randint(0,length)]returncode用于生成随机验证码和对应的邮箱并存入数据库中,将验证码以链接形式发送至邮箱,点击进行激活
defsend_register_email(email,send_type='register'):###########################生成随机验证码存入数据库中############################继承模型email_record=emailverifycode()code=random_str(16)#将随机生成code存入数据库中email_record.code=code#将管理的邮箱传入数据库中email_record.email=email#定义发送类型email_record.send_type=send_typeemail_record.save()###########################发送激活邮件###########################email_title=''email_body=''receive_email=emailifsend_type=='register':email_title='慕学在线激活连接'email_body='请点击下方连接,激活注册:'+'http://127.0.0.1:8000/active/{0}'.format(code)ifsend_type=='find_password':email_title='慕学在线密码找回连接'email_body='请点击下方连接,进行密码找回:'+'http://127.0.0.1:8000/active/{0}'.format(code)send_status=send_mail(email_title,email_body,email_from,[receive_email])将注册页上传上来的信息保存值userprofile,但是is_active还是0,表示还未进行激活。完成注册后跳转至登陆页面,注册失败的仍停留在注册页
classregisterview(view):defget(self,request):register_form=registerform()returnrender(request,'register.html',{'register_form':register_form})#将register_form数据传递给template#returnrender(request,'register.html',{})defpost(self,request):register_form=registerform(request.post)#将post上来的数据传递给registerformifregister_form.is_valid():#上传的数据符合form表要求,有效user_name=request.post.get('email','')pass_word=request.post.get('password','')########注册的时候需要查看邮箱是否有重复,利用了username进行了去重#######user_profile=userprofile()user_profile.username=user_nameuser_profile.email=user_name#明文数据需要经过加密后传入数据库,利用make_password方法加密user_profile.password=make_password(pass_word)user_profile.is_active=0#表面用户还未激活user_profile.save()#用于邮件激活操作send_register_email(user_name,send_type='register')returnrender(request,'login.html',{})#将register_form数据传递给templateelse:#注册失败跳转至index页面,暂时#returnrender(request,'index.html',{})returnrender(request,'register.html',{'register_form':register_form})#将register_form数据传递给template在url中,通过(?p.*)正则获取获取匹配的字符串(实际就是发送的验证码),绑定activeuserview,通过该类完成激活
url(r'^active/(?p
classactiveuserview(view):defget(self,request,active_code):#利用code在emailverifycode进行查询emailverifycoderecorder=emailverifycode.objects.filter(code=active_code)ifemailverifycoderecorder:#找到userprofile中的对应账号,并设is_active为1,即为激活账号foriinemailverifycoderecorder:email=i.emailuser=userprofile.objects.get(email=email)user.is_active=1user.save()returnrender(request,'login.html',{})#将register_form数据传递给templateelse:returnrender(request,'active_fail.html',{})#找不到记录则返回连接失效的页面密码找回在template中设置忘记密码的跳转
url(r'^forgetpwd/$',forgetpwdview.as_view(),name='forgetpwd'),定义forgetpwdform
classforgetpwdform(forms.form):email=forms.emailfield(required=true)captcha=captchafield(error_messages={'invalid':u'验证码错误'})将form的验证码form传入html中,并配置好静态文件
#html中配置验证码{{forgetpwd_form.captcha}}发送邮箱的函数
defsend_email(email,send_type='register'):###########################生成随机验证码存入数据库中############################继承模型email_record=emailverifycode()code=random_str(16)#将随机生成code存入数据库中email_record.code=code#将管理的邮箱传入数据库中email_record.email=email#定义发送类型email_record.send_type=send_typeemail_record.save()###########################发送激活邮件###########################email_title=''email_body=''receive_email=emailifsend_type=='register':email_title='慕学在线激活连接'email_body='请点击下方连接,激活注册:'+'http://127.0.0.1:8000/active/{0}'.format(code)ifsend_type=='find_password':email_title='慕学在线密码找回连接'email_body='请点击下方连接,进行密码找回:'+'http://127.0.0.1:8000/password_reset/{0}'.format(code)send_status=send_mail(email_title,email_body,email_from,[receive_email])在view中定义forgetpwdview后台逻辑
classforgetpwdview(view):defget(self,request):forgetpwd_form=forgetpwdform()returnrender(request,'forgetpwd.html',{'forgetpwd_form':forgetpwd_form})#将验证码传递给前端defpost(self,request):forgetpwd_form=forgetpwdform(request.post)ifforgetpwd_form.is_valid():#post数据成功,将验证码保存在emailverifycode,用于激活查询,并跳转至index页面email=request.post.get('email')send_email(email,send_type='find_password')returnrender(request,'index.html',{})else:#验证码错误或邮箱格式错误返回信息returnrender(request,'forgetpwd.html',{'forgetpwd_form':forgetpwd_form})注意form表单的变量名称要与html中的name保持一直,forgetpwd_form=forgetpwdform(request.post)才能匹配编写修改密码连接的url,绑定passwordreset
url(r'^password_reset/(?p
classpasswordreset(view):defget(self,request,active_code):returnrender(request,'password_reset.html',{})#获取修改密码页面defpost(self,request,active_code):emailverifycoderecorder=emailverifycode.objects.filter(code=active_code)#通过active_code去emailverifycode找到对应的emailifemailverifycoderecorder:#如果该验证码存在#找到userprofile中的对应账号,进行修改密码foriinemailverifycoderecorder:#一般来说该验证码是唯一的email=i.email#找到emailuser=userprofile.objects.get(email=email)#通过email在userprofile中找到对应的用户数据password_reset=passwordresetform(request.post)#新密码上传至表单中ifpassword_reset.is_valid():#新设置的密码符合表单的话password=request.post.get('password','')password2=request.post.get('password2','')ifpassword==password2:#两个密码相同,所有逻辑正确,进行密码修改#在数据库中信息密码修改user.password=make_password(password)user.save()returnrender(request,'login.html',{})#将register_form数据传递给templateelse:#如果两个密码不相同returnrender(request,'password_reset.html',{'msg':'两个密码不一致'})#将register_form数据传递给templateelse:#表单验证不通过returnrender(request,'password_reset.html',{'msg':'密码未填写或格式有问题'})else:pass#返回404页面template的修改
1.静态文件配置:{%static'name'%}2.url的配置:{%url'name'%}3.错误信息提示:
用户退出
url(r'^loginout/$',logout_view,name='user_loginout'),在view中定义好logout_view函数的逻辑,利用系统logout函数清除request的登陆信息