首先是`LoginForm`的代码:
```
# forms.py
class LoginForm(FlaskForm):
email = EmailField('Email', validators=[DataRequired(), Email()])
password = PasswordField('Password', validators=[DataRequired()])
submit = SubmitField('Sign In')
```
然后是对应的`html`
```
<!-- login.html -->
{% extends 'base.html' %}
{% from 'bootstrap5/form.html' import render_field %}
{% block content %}
<div style="height: 600px; padding-top: 100px;">
<div style="width: 36rem;" class="mx-auto shadow-sm px-3 py-5 bg-body rounded">
<h2>Sign In</h2>
<hr>
{% for msg in get_flashed_messages() %}
<p class="text-sm-start text-warning">{{msg}}</p>
{% endfor %}
<form method="post">
{{ form.csrf_token() }}
{{ render_field(form.email,placeholder='Your email')}}
{{render_field(form.password,placeholder='Your password')}}
{{render_field(form.submit)}}
<a class="btn btn-light" href="{{url_for('auth.register')}}"> Sign Up</a>
</form>
</div>
</div>
{% endblock %}
```
最后是对应的后端`view`代码:
```
@bp.route('/login', methods=['POST', 'GET'])
def login():
print('auth/login')
loginForm = LoginForm()
if loginForm.validate_on_submit(): #登录
print('validated')
email = loginForm.email.data
password = loginForm.password.data
user = User.query.filter_by(email=email).first()
if not user:
flash('User does not exist')
return render_template('login.html', form=loginForm)
if user.role >= const.DB_ROLE_VISITOR:
flash('Please verify the mailbox first')
return redirect(url_for('auth.email_verify'))
if not user.check_password(password):
flash('Incorrect password')
return render_template('login.html', form=loginForm)
login_user(user)
return redirect(url_for('post.list'))
return render_template('login.html', form=loginForm)
```
-
注册界面
注册界面的代码和登录几乎没有太大的区别。
首先是注册表单:
class RegisterForm(FlaskForm): email = EmailField('Email', validators=[DataRequired(), Email()]) username = StringField('Username', validators=[DataRequired(), Length(min=3, max=16)]) password = PasswordField('Password', validators=[DataRequired(), Length(min=6, max=12)]) submit = SubmitField('Sign Up')
然后是对应的前端代码:
<!-- register.html --> {% extends 'base.html' %} {% from 'bootstrap5/form.html' import render_field,render_form_row %} {% block content %} <div style="height: 600px; padding-top: 100px;"> <div style="width: 36rem;" class="mx-auto shadow-sm px-3 py-5 bg-body rounded"> <h2>Sign Up</h2> <hr> {% for msg in get_flashed_messages() %} <p class="text-sm-start text-warning">{{msg}}</p> {% endfor %} <form method="post"> {{ form.csrf_token() }} {{ render_field(form.email,placeholder='Enter your email address')}} {{ render_field(form.username,placeholder='Make a name you like')}} {{render_field(form.password,placeholder='Create a strong password')}} {{render_field(form.submit)}} <a class="btn btn-light" href="{{url_for('auth.login')}}"> Sign In</a> </form> </div> </div> {% endblock %}
最后是视图代码:
@bp.route('/register', methods=['POST', 'GET']) def register(): print('auth/register') registerForm = RegisterForm() if registerForm.validate_on_submit(): print('validated') email = registerForm.email.data username = registerForm.email.data password = registerForm.password.data user = User.query.filter_by(email=email).first() if user: flash('Mailbox registered') return render_template('register.html', form=registerForm) user = User(email=email, password=password, username=username) addUser(user) newPost(user) # 为当前用户添加一个文章 return redirect(url_for('auth.email_send', emailbox=email)) return render_template('register.html', form=registerForm)
-
密码修改
密码修改表单:
class RePasswardForm(FlaskForm): password = PasswordField('Original Password', validators=[DataRequired()]) newpaswd = PasswordField('New Password', validators=[DataRequired(), Length(min=6, max=12)]) confpswd = PasswordField( 'Confirm Password', validators=[DataRequired(), Length(min=6, max=12)]) submit = SubmitField('Confirm')
密码修改界面:
{% extends 'base.html' %} {% from 'bootstrap5/form.html' import render_field %} {% block content %} <div style="height: 600px; padding-top: 100px;"> <div style="width: 36rem;" class="mx-auto shadow-sm px-3 py-5 bg-body rounded"> {% for msg in get_flashed_messages() %} <p class="text-sm-start text-warning">{{msg}}</p> {% endfor %} <form method="post"> {{ form.csrf_token() }} {{ render_field(form.password) }} {{ render_field(form.newpaswd) }} {{ render_field(form.confpswd) }} {{ render_field(form.submit) }} <a class="btn btn-light" href="{{url_for('auth.register')}}"> Sign Up</a> </form> </div> </div> {% endblock %}
密码修改后端代码:
@login_required @bp.route("/resetpwd/<int:id>", methods=['GET', 'POST']) def resetpwd(id): print('auth/resetpwd') resetForm = RePasswardForm() if resetForm.validate_on_submit(): password = resetForm.password.data newpaswd = resetForm.newpaswd.data if not current_user.check_password(password): flash('The original password is incorrect') return render_template('reset_pwd.html', form=resetForm) current_user.password = newpaswd updateUser(current_user) return redirect(url_for('auth.logout')) return render_template('reset_pwd.html', form=resetForm)
-
邮箱验证
这也是本次更新的重点,用户在注册账号之后,系统会对注册邮箱发送一封邮件,用户在没有验证邮箱之前不能登录系统。
前后端的处理和之前一样,本次不再重复,只贴一段
flask-email
的使用代码:@bp.route('/email_send/<emailbox>')
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
。**
[外链图片转存中…(img-5szEMwdc-1715805508255)]
[外链图片转存中…(img-iwZcrElY-1715805508256)]
[外链图片转存中…(img-pfK47o99-1715805508256)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!