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'