python 的注册和登录框怎么弄
时间: 2023-09-09 16:06:02 浏览: 49
实现注册和登录框需要以下步骤:
1. 安装 Flask 框架和 Flask-WTF 扩展
```python
pip install flask
pip install flask-wtf
```
2. 创建 Flask 应用
```python
from flask import Flask, render_template, request
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Length, Email, EqualTo
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key_here'
```
3. 创建表单类
```python
class RegistrationForm(FlaskForm):
username = StringField('Username', validators=[DataRequired(), Length(min=2, max=20)])
email = StringField('Email', validators=[DataRequired(), Email()])
password = PasswordField('Password', validators=[DataRequired()])
confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')])
submit = SubmitField('Sign Up')
class LoginForm(FlaskForm):
email = StringField('Email', validators=[DataRequired(), Email()])
password = PasswordField('Password', validators=[DataRequired()])
remember = BooleanField('Remember Me')
submit = SubmitField('Login')
```
4. 创建路由和视图函数
```python
@app.route('/register', methods=['GET', 'POST'])
def register():
form = RegistrationForm()
if form.validate_on_submit():
flash(f'Account created for {form.username.data}!', 'success')
return redirect(url_for('home'))
return render_template('register.html', title='Register', form=form)
@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
if form.email.data == 'admin@example.com' and form.password.data == 'password':
flash('You have been logged in!', 'success')
return redirect(url_for('home'))
else:
flash('Login unsuccessful. Please check email and password', 'danger')
return render_template('login.html', title='Login', form=form)
```
5. 创建 HTML 模板
```html
<!-- register.html -->
{% extends "layout.html" %}
{% block content %}
<h1>Register</h1>
<form method="POST" action="">
{{ form.hidden_tag() }}
<div class="form-group">
{{ form.username.label(class="form-control-label") }}
{{ form.username(class="form-control form-control-lg") }}
{% for error in form.username.errors %}
<span class="invalid-feedback">{{ error }}</span>
{% endfor %}
</div>
<div class="form-group">
{{ form.email.label(class="form-control-label") }}
{{ form.email(class="form-control form-control-lg") }}
{% for error in form.email.errors %}
<span class="invalid-feedback">{{ error }}</span>
{% endfor %}
</div>
<div class="form-group">
{{ form.password.label(class="form-control-label") }}
{{ form.password(class="form-control form-control-lg") }}
{% for error in form.password.errors %}
<span class="invalid-feedback">{{ error }}</span>
{% endfor %}
</div>
<div class="form-group">
{{ form.confirm_password.label(class="form-control-label") }}
{{ form.confirm_password(class="form-control form-control-lg") }}
{% for error in form.confirm_password.errors %}
<span class="invalid-feedback">{{ error }}</span>
{% endfor %}
</div>
<div class="form-group">
{{ form.submit(class="btn btn-primary btn-lg") }}
</div>
</form>
{% endblock %}
<!-- login.html -->
{% extends "layout.html" %}
{% block content %}
<h1>Login</h1>
<form method="POST" action="">
{{ form.hidden_tag() }}
<div class="form-group">
{{ form.email.label(class="form-control-label") }}
{{ form.email(class="form-control form-control-lg") }}
{% for error in form.email.errors %}
<span class="invalid-feedback">{{ error }}</span>
{% endfor %}
</div>
<div class="form-group">
{{ form.password.label(class="form-control-label") }}
{{ form.password(class="form-control form-control-lg") }}
{% for error in form.password.errors %}
<span class="invalid-feedback">{{ error }}</span>
{% endfor %}
</div>
<div class="form-group form-check">
{{ form.remember(class="form-check-input") }}
{{ form.remember.label(class="form-check-label") }}
</div>
<div class="form-group">
{{ form.submit(class="btn btn-primary btn-lg") }}
</div>
</form>
{% endblock %}
```
6. 运行 Flask 应用
```python
if __name__ == '__main__':
app.run(debug=True)
```
这样就实现了一个简单的注册和登录框。当用户点击提交按钮时,表单数据会被提交到对应的路由处理函数中,进行验证和处理。如果验证通过,则返回成功提示并跳转到首页,否则返回失败提示。