有了用戶登錄界面,自然也少不了給用戶註冊的頁面,接下來就是對用戶的註冊進行處理:
首先在main.py中添加註冊頁面的路由:
@main_blueprint.route('/register', methods=['GET', 'POST'])
def register():
form = RegisterForm()
if form.validate_on_submit():
new_user = User(username=form.username.data)
new_user.set_password(form.password.data)
db.session.add()
db.session.commit()
flash("Your user has been created, please login now", category="success")
return redirect(url_for('main.login'))
return render_template('register.html', form=form)
隨後,我們需要創建register.html讓flask渲染
{% extends "base.html" %}
{% block title %}Register{% endblock %}
{% block body %}
<div class="row">
<div class="col-md-4"></div>
<div class="col-md-4">
<h1 class="text-center">Register</h1>
<form method="POST" action="{{ url_for('main.register') }}">
{{ form.hidden_tag() }}
<div class="form-group">
{{ form.username.label }}
{% if form.username.errors %}
{% for e in form.username.errors %}
<p class="help-block">{{ e }}</p>
{% endfor %}
{% endif %}
{{ form.username(class_='form-control') }}
</div>
<div class="form-group">
{{ form.password.label }}
{% if form.password.errors %}
{% for e in form.password.errors %}
<p class="help-block">{{ e }}</p>
{% endfor %}
{% endif %}
{{ form.password(class_='form-control') }}
</div>
<div class="form-group">
{{ form.confirm.label }}
{% if form.confirm.errors %}
{% for e in form.confirm.errors %}
<p class="help-block">{{ e }}</p>
{% endfor %}
{% endif %}
{{ form.confirm(class_='form-control') }}
</div>
<div class="form-group">
{{ form.captcha.label }}
{% if form.captcha.errors %}
{% for e in form.captcha.errors %}
<p class="help-block">{{ e }}</p>
{% endfor %}
{% endif %}
{{ form.captcha(class_='form-control') }}
<img src="/code " onclick="this.src='/code?'+ Math.random()">
</div>
<input class="btn btn-primary" type="submit" value="Register">
</form>
</div>
</div>
{% endblock %}
同時,我們需要有註冊的表單,打開forms.py:
class RegisterForm(FlaskForm):
from wtforms.validators import EqualTo
username = StringField('Username', [DataRequired(), Length(max=255)])
password = PasswordField('Password', [DataRequired(), Length(min=8)])
confirm = PasswordField('Confirm Password', [DataRequired(), EqualTo('password')])
captcha = StringField('Captcha', validators=[DataRequired()])
def validate(self):
check_validate = super().validate()
if not check_validate:
return False
user = User.query.filter_by(username=self.username.data).first()
if user:
self.username.errors.append('Username already exists')
return False
return True
點擊此處查看Git源碼
我們打開註冊界面: