欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python WEB框架Flask学习

程序员文章站 2022-07-02 18:51:42
...

一个最简单的Flask

from flask import Flask

app=Flask(__name__)


@app.route('/')
def index():
    return 'index'


if __name__=="__main__":
    app.run()

配置文件

方式一
 app.config('DEBUG')=True
方式二
    app.config.from_object('python类或类的路径')

列如
settings.py
    class Config:
        DEBUG=True
        # 连接mysql示例
        DATABASE_URI="mysql+pymysql://root:[email protected]:3306/数据库名"
    # 开发中示例
    class DevelopmentConfig(Config):
        DEBUG=True

路由系统

@app.route('/user/<username>')
@app.route('/post/<int:post_id>')
@app.route('/post/<float:post_id>')
@app.route('/post/<path:path>')
@app.route('/login', methods=['GET', 'POST'])


# 类视图的写法
from flask.views import View
class Index(View):
    # 请求的方式
    methods=['GET']
    # 装饰器
    decorators=[wrapper,]

    def get(self):
        return "GET"
    def post(self):
        return "POST"
# 路由
app.add_url_rule('/index',view_func=Index.as_view(name='xxx')) name=endpoint

模板的使用

静态文件的引入

{{ url_for('static',filename='static下面的文件路径') }}
路由反向解析
例如蓝图名为---blue
{{ url_for('blue.fun')  }}

请求响应,session,cookie

请求与响应

请求前调用此-- 可应用于蓝图
@app.before_request
def test():
    pass

# 响应后调用次函数
@app.arter_request
def test2():
    return "OK"






ps:使用session 需要设置app.secret_key='safdsdfsdf'
设置session
session['username']=username
删除session
session.pop('username')

cookie的设置
request.set_cookie['username']=xxxx
cookie的获取
request.cookies['xxx']

flash

两个函数 

flash()    可分类   flash(category=['xx']) 

get_flashed_messages()    分类收 get_flashed_messages(category_filter=['xx'])  get_flash_messages->list 返回一个列表

 中间件

通过看源码得知
中间件的配置如下
解释 --1.需要自定义一个中间件类
        2. 对初始化函数把wsgi_app 包了一下
        3. 在 return self.wsgi_app 的前后可进行需求处理

from flask import Flask, flash, redirect, render_template, request
 
app = Flask(__name__)
app.secret_key = 'some_secret'
 
@app.route('/')
def index1():
    return render_template('index.html')
 
@app.route('/set')
def index2():
    v = request.args.get('p')
    flash(v)
    return 'ok'
 
class MiddleWare:
    def __init__(self,wsgi_app):
        self.wsgi_app = wsgi_app
 
    def __call__(self, *args, **kwargs):
 
        return self.wsgi_app(*args, **kwargs)
 
if __name__ == "__main__":
    app.wsgi_app = MiddleWare(app.wsgi_app)
    app.run(port=9999)

Flask 连接数据库

1.安装  pip install  flask-Sqlalchemy
2.连接数据库
   1.配置如下
  app.config['SQLALCHEMY_DATABASE_URI']='mysql+pymysql://root:[email protected]:3306/test'
   参数解释--->连接的数据库+数据库引擎(需安装pymysql)://用户名:密码@数据库ip地址:端口/数据库名称
   2.连接数据库
   # 导入models.py 中实例化的db对象
   db.init_app(app)  db变量下面解释


models.py
   from flask_sqlalchemy import SQLAlchemy
   db=SQLAlchemy()
   
   创表
   class Student(db.Model):
        # 存在数据库中的表明  不写默认是类名的是小写
        __tablename__ = 'Student'
 
        id = db.Column(db.Integer, primary_key=True, autoincrement=True)
        name = db.Column(db.String(10), unique=True)
        age = db.Column(db.Integer, default=18)
        grade_id = db.Column(db.Integer, db.ForeignKey('grade.id'), nullable=True)
        # Studnet.course 得到course对象 可对Course表操作
        course = db.relationship('Course', secondary=c_s, backref='student')

   class Grade(db.Model):
        __tablename__ = 'grade'
        id = db.Column(db.Integer, primary_key=True, autoincrement=True)
        name = db.Column(db.String(10), nullable=False, unique=True)
        # 关联关系  Grade.student 得到学生对象 可对学生表操作
        student = db.relationship('Student', backref='grade')


    class Course(db.Model):
        id = db.Column(db.Integer, primary_key=True, autoincrement=True)
        # 描述符
        name = db.Column(db.String(10), unique=True, nullable=False)
    
        __tablename__ = 'course'