flask
基础
轻量级python后端框架
网址
学习目录
flask路由
用来匹配url
request对象
abort函数
模板
flask数据库
表单
ajax
管理系统案例(略)
安装
命令:pip install flask -i https://pypi.douban.com
from flask import Flask
app = Flask(name)
@app.route(‘/’)
def hello_world(): # put application’s code here
return ‘Hello World!’
if name == ‘main’:
app.run()
路由
基础路由
类似springboot中写法,与django相区别
@app.route(‘/’)
def hello_world(): # put application’s code here
return ‘Hello World!’
methods使用
请求格式,分get,post
endpoint:防止函数名重名
route重名从上到下
参数<>
字符串处理
- route里需要加
- 函数()要添加变量xxx
转换器
例:int:id
int, string,float
path包含/的文本
自定义转换器
<>:提取参数
from flask import Flask
from werkzeug.routing import BaseConverter
app = Flask(name)
class RegexConverter(BaseConverter):
def __init__(self, url_map, regex):
# 调用父类方法
super(RegexConverter, self).__init__(url_map)
self.regex = regex
def to_python(self, value):
print("to_python方法被调用")
return value
app.url_map.converters[‘re’] = RegexConverter
{‘re’: ‘^(?P[a-z]+)$’}
@app.route(‘/index/<re(“123”):value>’)
def index(value):
return ‘hello %s’ % value
if name == ‘main’:
app.run()
form表单
- 相关前端页面
- 后端使用render_template关联
from flask import Flask, render_template
app = Flask(name)
@app.route(‘/’)
def index(): # put application’s code here
return render_template(‘index.html’)
if name == ‘main’:
app.run()
request对象
包含前端发送过来的所有请求数据
● request.method 请求类型
● request.from.get(‘name’) 请求内容
重定向
- redirect(‘网址’)
- redirect(url_for(hello))不加redirect返回route内字符串
返回json数据给前端
-
基础格式
-
中文输出
-
json回传
JSONIFY使用
abort函数
raise 主动抛出异常
abort 在网页中抛出异常
自定义异常
返回文字
返回网页
模板 jinja2
-
数据回传
-
设置jinja2
a. 取值方法
过滤器
- 系统自带过滤器
- 自定义过滤器
跳着取值
flask表单
定义表单类型
使用
前端
后端(之前pass部分修改)
验证器
validate_on_submit验证器,验证表单数据(EqualTo那里)
flask数据库
基础操作
安装
命令:pip install flask-sqlalchemy
问题
用户无权限
ERROR: Could not install packages due to an OSError: [WinError 5] 拒绝访问。: ‘F:\AI\anaconda3\Lib\site-packages\~arkupsafe\_speedups.cp38-win_amd64.pyd’
Consider using the --user
option or check the permissions.
更换命令pip install --user flask-sqlalchemy
缺少依赖
ERROR: pip’s dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
anaconda-project 0.9.1 requires ruamel-yaml, which is not installed.
根据提示安装相应依赖
执行:pip install ruamel-yaml后重新执行原命令即可
代码
创建模型类
创建数据表
-
单次操作提交
-
多次操作提交
命令行查询数据库
● 提前导入数据库:from xxx import *
● User.query.all() 获取对象
○ User.query.get(1).name 获取名字
○ User.query.filter(User.name == ‘zhangsan’).get() 过滤,查找名字为zhangsan的数据
○ User.query.filter(User.name.like(‘%a%’)).all() 模糊匹配
○ User.query.filter(and_(User.name == ‘zhangsan’,User.id == ‘1’)).all()
■ 需要from sqlalchemy import and_
● 修改数据
○ 获取数据:user = User.query.get(1)
○ 修改数据:user.name = ‘hello’
○ 提交:db.session.commit()
● 删除数据
○ 获取数据:user = User.query.get(1)
○ 删除数据:db.session.delete(user)
○ 提交:db.session.commit()