Flask+MySql实现用户登录注册

来源:互联网 发布:没有违法淘宝规则 编辑:程序博客网 时间:2024/06/05 06:03

Flask+MySql实现用户登录注册

项目使用插件:

flask_bootstrap

flask_wtf

flask_login

flask_sqlalchemy

用户模型类:

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time    : 2017/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=name        self.pwd=pwd    def get_id(self):        return unicode(self.id)    def __repr__(self):        return '<User %r>' % self.name    def is_authenticated(self):        return True    def is_active(self):        return True    def is_anonymous(self):        return False

表单类:

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time    : 2017/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    : 2017/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)        db.session.commit()        flash('注册成功')        return redirect(url_for('blog.index'))    return render_template('register.html',form=form)

项目启动类:

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time    : 2017/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 Users    return Users.query.get(int(user_id))"""蓝图注册"""def init():    from Views import blog    app.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/

效果:



原创粉丝点击