700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Flask+MySql实现用户登录注册

Flask+MySql实现用户登录注册

时间:2022-06-15 05:25:48

相关推荐

Flask+MySql实现用户登录注册

Flask+MySql实现用户登录注册

项目使用插件:

flask_bootstrap

flask_wtf

flask_login

flask_sqlalchemy

用户模型类:

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : /8/1 14:45# @File : Model.py"""数据模型"""from flask_login import LoginManager,login_user,UserMixin,logout_user,login_requiredfrom Start import login_mangerfrom Start import dbclass Users(UserMixin,db.Model):__tablename__ = 'py_user'#对应mysql数据库表id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String(64), unique=True, index=True)pwd = db.Column(db.String(64), unique=True, index=True)def __init__(self,name,pwd):self.name=nameself.pwd=pwddef get_id(self):return unicode(self.id)def __repr__(self):return '<User %r>' % self.namedef is_authenticated(self):return Truedef is_active(self):return Truedef is_anonymous(self):return False

表单类:

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : /8/1 14:46# @File : Form.py"""表单类"""from wtforms import StringField,SubmitField,PasswordFieldfrom wtforms.validators import Requiredfrom flask_wtf import FlaskForm#登录表单class Login_Form(FlaskForm):name=StringField('name',validators=[Required()])pwd=PasswordField('pwd',validators=[Required()])submit=SubmitField('Login in')#注册表单class Register_Form(FlaskForm):name=StringField('name',validators=[Required()])pwd=PasswordField('pwd',validators=[Required()])submit=SubmitField('register')

视图类:

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : /8/1 14:45# @File : Views.py"""视图模型"""from flask import render_template,Blueprint,redirect,url_for,flashfrom Start import login_mangerfrom Form import Login_Form,Register_Formfrom Model import Usersfrom flask_login import LoginManager,login_user,UserMixin,logout_user,login_requiredfrom DB import dbblog=Blueprint('blog',__name__) #蓝图@blog.route('/')def index():form=Login_Form()return render_template('login.html',form=form)@blog.route('/index')def l_index():form = Login_Form()return render_template('login.html',form=form)@blog.route('/login',methods=['GET','POST'])def login():form=Login_Form()if form.validate_on_submit():user=Users.query.filter_by(name=form.name.data).first()if user is not None and user.pwd==form.pwd.data:login_user(user)flash('登录成功')return render_template('ok.html',name=form.name.data)else:flash('用户或密码错误')return render_template('login.html',form=form)#用户登出@blog.route('/logout')@login_requireddef logout():logout_user()flash('你已退出登录')return redirect(url_for('blog.index'))@blog.route('/register',methods=['GET','POST'])def register():form=Register_Form()if form.validate_on_submit():user=Users(name=form.name.data,pwd=form.pwd.data)db.session.add(user)mit()flash('注册成功')return redirect(url_for('blog.index'))return render_template('register.html',form=form)

项目启动类:

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : /8/1 14:50# @File : Start.py"""应用启动类"""from flask import Flask,render_template,flash,url_for,redirect,Blueprintfrom flask_bootstrap import Bootstrapfrom flask_moment import Momentfrom flask_wtf import FlaskFormfrom flask_login import LoginManager,login_user,UserMixin,logout_user,login_requiredfrom flask_sqlalchemy import SQLAlchemyimport sys#解决flash的一个bugdefaultencoding = 'utf-8'if sys.getdefaultencoding() != defaultencoding:reload(sys)sys.setdefaultencoding(defaultencoding)app = Flask(__name__)#各项插件的配置app.config['SECRET_KEY']='kkk'app.config['SQLALCHEMY_DATABASE_URI'] ='mysql://root:1996112lin@localhost/mydata'#配置数据库app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=Truedb = SQLAlchemy()db.init_app(app)bootstrap = Bootstrap(app)moment=Moment(app)login_manger=LoginManager()login_manger.session_protection='strong'login_manger.login_view='blog.login'login_manger.init_app(app)@login_manger.user_loaderdef load_user(user_id):from Model import Usersreturn Users.query.get(int(user_id))"""蓝图注册"""def init():from Views import blogapp.register_blueprint(blueprint=blog,url_prefix='/blog')if __name__ == '__main__':init()app.run(port=6626,debug=True)

本例使用了Jinja2模板进行渲染

基础类模板:

{% extends "bootstrap/base.html" %}{% block title %}Flasky{% endblock %}{% block head %}{{ super() }}<link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico') }}" type="image/x-icon"><link rel="icon" href="{{ url_for('static', filename='favicon.ico') }}" type="image/x-icon">{% endblock %}{% block navbar %}<div class="navbar navbar-inverse" role="navigation"><div class="container"><div class="navbar-header"><button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a class="navbar-brand" href="/">Flasky</a></div><div class="navbar-collapse collapse"><ul class="nav navbar-nav"><li><a href="/">Home</a></li></ul><ul class="nav navbar-nav navbar-right">{% if current_user.is_authenticated %}<li><a href="{{ url_for('blog.logout') }}">Log Out</a></li>{% else %}<li><a href="blog.index">Log In</a></li>{% endif %}</ul><ul class="nav navbar-nav navbar-right"><li><a href="{{ url_for('blog.register') }}">Register in</a></li></ul></div></div></div>{% endblock %}{% block content %}<div class="container">{% for message in get_flashed_messages() %}<div class="alert alert-warning"><button type="button" class="close" data-dismiss="alert">&times;</button>{{ message }}</div>{% endfor %}{% block page_content %}{% endblock %}</div>{% endblock %}{% block scripts %}{{ super() }}{{ moment.include_moment() }}{% endblock %}

登录模板:

{% extends "form_base.html" %}{% import "bootstrap/wtf.html" as wtf %}{% block title %}Flasky{% endblock %}{% block page_content %}<div class="page-header"><h1>Login</h1></div><form action="/blog/login" method="post">{{ wtf.quick_form(form) }}</form>{% endblock %}

注册模板:

{% extends "form_base.html" %}{% import "bootstrap/wtf.html" as wtf %}{% block title %}Flasky{% endblock %}{% block page_content %}<div class="page-header"><h1>Register</h1></div><form action="/blog/register" method="post">{{ wtf.quick_form(form) }}</form>{% endblock %}

登录后模板:

<!DOCTYPE html>{% extends 'form_base.html' %}<html lang="en"><head><meta charset="UTF-8"><title>Title</title></head><body>{% block page_content %}<div class="page-header"><h1>Hello,{{ name }}</h1></div>{% endblock %}</body></html>

启动后访问:

http://127.0.0.1:6626/blog/

效果:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。