app
from flask import Flask
from flask_script import Manager
from App. ext import db
from App. views import blue
app = Flask( __name__)
app. config. from_pyfile( "settings.py" )
db. init_app( app)
manager = Manager( app)
app. register_blueprint( blue)
if __name__ == '__main__' :
manager. run( )
App.ext
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy( )
settings
DEBUG = True
SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:19970223@localhost:3306/sess"
SQLALCHEMY_TRACK_MODIFICATIONS = False
SECRET_KEY = "i9490kl*(780990HGjhsoid7872378287mn,,.,ghghY!@3"
App.views
from flask import Blueprint, render_template, request, session, redirect, url_for, flash
from App. models import User
blue = Blueprint( "blue" , __name__)
def check_login ( func) :
def inner ( * args, ** kwargs) :
if session. get( "username" ) :
return func( * args, ** kwargs)
else :
return redirect( "/login/" )
return inner
@blue. route( "/" )
def index ( ) :
username = session. get( 'username' )
print ( username)
return render_template( "index.html" )
@blue. route( "/login/" , methods= [ 'GET' , 'POST' ] )
def login ( ) :
if request. method == 'POST' :
print ( request. values. to_dict( ) )
username = request. values. get( 'username' )
password = request. values. get( 'password' )
user = User. query. filter ( User. username== username, User. password== password) . first( )
if user:
session[ 'username' ] = "sdfdsfds"
session[ 'uid' ] = "sdfkjsdfjk"
session[ 'hello' ] = "3333"
return redirect( "/" )
else :
flash( "用户名或密码错误" )
return redirect( url_for( "blue.login" ) )
return render_template( "login.html" )
@blue. route( "/logout/" )
def logout ( ) :
session. clear( )
return redirect( "/" )
@blue. route( "/reply/" )
@check_login
def user_reply ( ) :
return "回复"
App.models
from App. ext import db
class User ( db. Model) :
__tablename__ = 'user'
uid = db. Column( db. Integer, primary_key= True )
username = db. Column( db. String( 30 ) , nullable= False )
password = db. Column( db. String( 128 ) , nullable= False )
gender = db. Column( db. Integer)
index.html
<!DOCTYPE html>
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title</ title>
</ head>
< body>
{# session是全局对象,在模板和后端代码里都可以使用 #}
{% if session.get('username') %}
< p> 欢迎{{ session.get('username') }}回来, < a href = " {{ url_for(' blue.logout' ) }}" > 退出登录</ a> </ p>
{% else %}
< p> 你还没有登录,请先 < a href = " {{ url_for(' blue.login' ) }}" > 登录</ a> </ p>
{% endif %}
</ body>
</ html>
login.html
<!DOCTYPE html>
< html lang = " zh-CN" >
< head>
< meta charset = " utf-8" >
< meta http-equiv = " X-UA-Compatible" content = " IE=edge" >
< meta name = " viewport" content = " width=device-width, initial-scale=1" >
< title> Bootstrap 101 Template</ title>
< link href = " https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel = " stylesheet" >
</ head>
< body>
{# 消息闪烁 #}
{% for message in get_flashed_messages() %}
< div class = " alert alert-warning alert-dismissible" role = " alert" >
< button type = " button" class = " close" data-dismiss = " alert" aria-label = " Close" > < span aria-hidden = " true" > × </ span> </ button>
< strong> Warning!</ strong> {{ message }}
</ div>
{% endfor %}
< form action = " {{ url_for(' blue.login' ) }}" method = " post" >
用户名:< input type = " text" name = " username" > < br>
密码:< input type = " password" name = " password" > < br>
< input type = " submit" >
</ form>
< script src = " https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js" > </ script>
< script src = " https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js" > </ script>
</ body>
</ html>
login.html(简)
<!DOCTYPE html>
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 登录</ title>
</ head>
< body>
< form action = " {{ url_for(' bp.login' ) }}" method = " post" >
用户名:< input type = " text" name = " username" > < br>
密码: < input type = " password" name = " password" > < br>
< input type = " submit" >
</ form>
</ body>
</ html>