Flask+MySql实现用户登录注册

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_required
from Start import login_manger
from Start import db

class 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 '' % 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,PasswordField
from wtforms.validators import  Required
from 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,flash
from Start import login_manger
from Form import Login_Form,Register_Form
from Model import  Users
from flask_login import LoginManager,login_user,UserMixin,logout_user,login_required
from DB import db

blog=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_required
def 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,Blueprint
from flask_bootstrap import Bootstrap

from flask_moment import Moment
from flask_wtf import FlaskForm
from flask_login import LoginManager,login_user,UserMixin,logout_user,login_required
from flask_sqlalchemy import SQLAlchemy
import sys
#解决flash的一个bug
defaultencoding = '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']=True
db = 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_loader
def 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 navigationspan>
                <span class="icon-bar">span>
                <span class="icon-bar">span>
                <span class="icon-bar">span>
            button>
            <a class="navbar-brand" href="/">Flaskya>
        div>
        <div class="navbar-collapse collapse">
            <ul class="nav navbar-nav">
                <li><a href="/">Homea>li>
            ul>

              <ul class="nav navbar-nav navbar-right">
                {% if current_user.is_authenticated %}
                <li><a href="{{ url_for('blog.logout') }}">Log Outa>li>
                {% else %}
                <li><a href="blog.index">Log Ina>li>
                {% endif %}
            ul>
            <ul class="nav navbar-nav navbar-right">
                <li><a href="{{ url_for('blog.register') }}">Register ina>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">×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>Loginh1>
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>Registerh1>
div>
    <form action="/blog/register" method="post">
    {{ wtf.quick_form(form) }}

    form>

{% endblock %}

登录后模板:


{% extends 'form_base.html' %}
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
head>
<body>


{% block page_content %}
    <div class="page-header">
    <h1>Hello,{{ name }}h1>
div>

{% endblock %}
body>
html>

启动后访问:

http://127.0.0.1:6626/blog/

效果:


Flask+MySql实现用户登录注册_第1张图片

你可能感兴趣的:(Flask)