项目介绍
- 首页:
- 首页导航栏
首先是首页导航栏,当用户没有登录的时候首页导航栏会显示为
这是用户没有登录的情况 最右边会有登录和注册的按钮。当用户点击注册时,会跳转到注册页面。
当用户登录后。
最右边会显示用户的用户名,点击时有三个选项,下面会对这几个功能进行介绍,当用户点击个人中心时会跳转到个人信息的页面。
- 注册功能
需要用手机号进行注册,点击发送验证码的时候会出现倒计时,在一分钟之内完成注册内是手机验证码是有效的,要注册成功必须输入正确的短信验证码和图片验证码。点击立即注册即可完成用户的注册,之后会跳转到首页。首页导航条最右部分将会变成用户信息。
注册页面和登录页面都是使用的同一个HTML模板。采用了flask中的jinjia2和模板继承{%extends %}的方法。
因为需要用到get和post两种方法所以我们采用类视图的方法。
其中我们通过request.referrer获取上一个跳转过来的页面,然后传递给html模板,最后通过js文件当注册完成时,跳转回上一个页面。当上一个页面不存在或者不满足安全要求或者就是当前页面时,跳转回首页。
class Signupview(views.MethodView):
def get(self):
return_to = request.referrer
if return_to and return_to !=request.url and safeutils.is_safe_url(return_to):
return render_template('front/front_signup.html',return_to=return_to)
else:
return render_template('front/front_signup.html')
def post(self):
form = Signupform(request.form)
if form.validate():
telephone =form.telephone.data
user =Front_user.query.filter_by(telephone=telephone)
if user:
return restful.params_error('手机号已被注册!')
else:
username =form.username.data
password =form.password1.data
user =Front_user(telephone=telephone,username=username,password=password)
db.session.add(user)
db.session.commit()
session[config.front_user_id] = user.id
return restful.sucess()
else:
print(form.get_error())
return restful.params_error(message=form.get_error())
采用了ajax的方法发送请求。
使用了阿里大于进行短信发送,使用官方的发送短信验证码的API,进行信息的配置后,调用send_sms函数即可进行信息的发送。Captcha.是之前定义的一个类用来生成验证码和图形验证码,验证码是随机生成的。当点击发送验证码的时候会调用这个接口。经过form表单(进行了一定的加密作用 防止利用接口无限发送短信。采用POST请求)验证后提取数据通过memcache在内存中对短信验证码进行存储。默认60S后过期。如果没有验证成功将会出现提醒。
@bp.route('/sms_captcha/',methods=['POST'])
def sms_captcha():
#手机号码 时间戳 md5(ts+tele+salt)
form =Smscaptchaform(request.form)
if form.validate():
telephone =form.telephone.data
captcha = Captcha.gene_text(number=6)
result = alidayu.send_sms(131212330, telephone, "玉子论坛", "SMS_xxxxxx", {
'code': captcha})
if result:
zlcache.set(telephone,captcha)
return restful.sucess()
else:
return restful.params_error('短信验证码发送失败')
else:
return restful.params_error(message='参数错误!'