python flask框架发布问答平台注册页面_Python 基于Flask的Web开发【1】【用户登录 注册】...

实现目标

基于Flask实现用户的登录/注册。

设计思路

前端

1.编写登录和注册表单

2.编写视图函数

3.编写相应的html文件

4.页面测试

后台

1.创建数据库

2.修改配置文件

3.编写数据表类并生成数据表

4.修改视图函数,实现数据交互

前端实现

1.编写登录和注册表单(/app/home/forms.py)

# 导入表单基类

from flask_wtf import FlaskForm

# 导入需要用到的表格类型

from wtforms import StringField, PasswordField, SubmitField

# 导入需要用的验证方式

from wtforms.validators import DataRequired, EqualTo, Length, Email

# 用户注册表单

class RegisterForm(FlaskForm):

# 用户名表框

username = StringField(

label= '用户名', # 标签

validators=[ # 验证方式

DataRequired() # 不能为空

]

)

# 密码表框

password = PasswordField(

label='密码',

validators=[

DataRequired(),

Length(6,16,message='密码长度应在6-16位') # 密码长度必须在6-16,否则输出提示信息

]

)

# 邮箱表框

email = StringField(

label='邮箱',

validators=[

DataRequired(),

Email(message='邮箱不合法')

]

)

# 注册按钮

submit = SubmitField(

label='注册'

)

# 登录表单

class LoginForm(FlaskForm):

username = StringField(

label='用户名',

validators=[

DataRequired()

]

)

password = PasswordField(

label='密码',

validators=[

Length(6, 16, message='密码长度应在6-16位')

]

)

submit = SubmitField(

label='登录'

)

2.编写视图函数(/app/home/views.py)

from . import home_bp # 导入蓝图

from flask import render_template # 用于模板渲染

@home_bp.route('/')

def index():

return render_template('index.html')

@home_bp.route('/login/',methods =['GET','POST'])

def login():

from app.home.forms import LoginForm

form = LoginForm()

return render_template('login.html',form=form)

@home_bp.route('/register/',methods =['GET','POST'])

def register():

from app.home.forms import RegisterForm

form = RegisterForm()

return render_template('register.html',form=form)

3.编写相应的html文件

基模板(/app/templates/base.html)

为了统一页面风格,继承bootstrap/base.html,创建自己的基模板

登录页面(/app/templates/login.html)

登录页面,继承自上面的base.html,并在content中生成登录表单

注册页面(/app/templates/register.html)

注册页面,继承自上面的base.html,并在content中生成注册表单

4.测试效果

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

后台实现

1.创建数据库

在mysql shell中创建数据库

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

2.修改配置文件

在配置文件中添加代码如下:

# 数据库配置

SQLALCHEMY_DATABASE_URI ="mysql://root:mysql@locallost/sentry" # 指定数据库

SQLALCHEMY_TRACK_MODIFICATIONS = False # 关闭追踪

3.编写数据表类并生成数据表

在models.py中编写数据表结构如下:

from app import db

# 用户数据表

class User(db.Model):

id = db.Column(db.Integer,primary_key=True,autoincrement=True)

name = db.Column(db.String(30),unique=True)

password = db.Column(db.String(300))

email = db.Column(db.String(40),unique=True)

def __repr__(self):

return ""%self.name

在__init__.py中利用SQLAlchemy实例化数据库对象

from flask_sqlalchemy import SQLAlchemy

import pymysql

# 数据库报错问题

pymysql.install_as_MySQLdb()

# 读取配置文件的配置信息

app.config.from_pyfile('../config.py')

db = SQLAlchemy(app)

在manage.py中添加代码如下:

from app import db # 导入数据库对象

from werkzeug.security import generate_password_hash # 哈希加密

from app.models import User # 导入数据表类

@manager.command # 使函数可以作为命令在shell中直接执行

def db_init():

db.drop_all() # 删除已有数据表

db.create_all() # 创建新数据表

admin = User(name='admin', password=generate_password_hash('admin')) # 实例化一个用户对象

db.session.add(admin) # 添加入session

db.session.commit() # 提交给数据库

print("数据库初始化成功")

在python shell 中执行 python manage.py db_init 即可完成数据库初始化

在mysql中查看

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

4.修改视图函数,实现数据交互

from werkzeug.security import generate_password_hash # 哈希加密

from app import db

from . import home_bp # 导入蓝图

from flask import render_template, redirect, request, flash, session, url_for

@home_bp.route('/')

def index():

return render_template('index.html')

# 登录

@home_bp.route('/login/',methods =['GET','POST'])

def login():

from app.home.forms import LoginForm

from app.models import User

form = LoginForm()

if form.validate_on_submit():

# 获取表单中的数据

username = form.username.data

password = form.password.data

# 在数据库中查找

user = User.query.filter_by(name = username).first()

# 用户名和密码匹配成功时

if user and user.verify_password(password):

# 登陆成功将用户信息添加到session信息中去

session['user']=user.name

session['id']= user.id

flash('登录成功')

return redirect(url_for('home.index'))

flash('用户名或密码错误')

return render_template('login.html',form=form)

# 注册

@home_bp.route('/register/',methods =['GET','POST'])

def register():

from app.home.forms import RegisterForm

from app.models import User

form = RegisterForm()

if form.validate_on_submit():

# 获取表单中的数据

name = form.username.data

password = form.password.data

email = form.email.data

if User.query.filter_by(name=name).first():

flash('用户名已存在')

return redirect(url_for('home.register'))

if User.query.filter_by(email=email).first():

flash('邮箱已占用')

return redirect(url_for('home.register'))

# 密码进行哈希加密

user = User(name=name,password=generate_password_hash(password),email=email)

db.session.add(user)

db.session.commit()

flash('注册成功,请登录')

return redirect(url_for('home.login'))

return render_template('register.html',form=form)

# 注销

@home_bp.route('/logout/')

def logout():

# 清除session信息

session.clear()

return redirect(url_for('home.login'))

部分测试结果

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值