flask框架

1.自定义命令

2.多app应用

3.wtforms认证

4.sqlalchemy介绍

5.scoped_session

6.单表操作

7.一对多关系

8.多对多关系

9.flask-sqlalche

一.自定义命令

用于实现类似于django中python3 manage.py runserver ....类似的命令

首先导入flask-script

# 第一步先安装:pip3 install flask-script
# 执行方式:python install flask-script.py runserver
from flask import Flask
from flask_script import Manager
app = Flask(__name__)
manager=Manager(app)

@app.route("/")
def index():
    return "ok"

# 自定义命令
@manager.command
def custom(arg,a):
    """
    如果在传一个参数,就打印2个
    第一种自定义命令的方式
    python manage.py custom 123
    :param arg:
    :return:
    """
    print(arg,a)

@manager.option('-n', '--name', dest='name')
@manager.option('-u', '--url', dest='url')
def cmd(name, url):
    """
    注意:这个装饰器要对应着函数里面的参数,有几个装饰器就要对应的有几个参数
    第二种自定义命令的方式(-n也可以写成--name)
    执行: python manage.py  cmd -n lqz -u http://www.oldboyedu.com
    执行: python manage.py  cmd --name lqz --url http://www.oldboyedu.com
    :param name:
    :param url:
    :return:
    """
    print(name, url)
if __name__ == '__main__':
    manager.run()

二.多app应用

from werkzeug.wsgi import DispatcherMiddleware
from werkzeug.serving import run_simple
from flask import Flask
app1 = Flask('app01')
app2 = Flask('app02')
'''
有2个app url路径是一样的,如何可以区别他们2个,
可以在一个app下面配置一个
dm = DispatcherMiddleware(app1, {
    '/sec12': app2,
})
指定一下,在访问app2时前面加上一个sec12就可以了,
访问app1时就照常访问
'''
@app1.route('/index')
def index():
    return "app01"

@app2.route('/index')
def index2():
    return "app2"
dm = DispatcherMiddleware(app1, {
    '/sec12': app2,
})
if __name__ == "__main__":

    run_simple('localhost', 5000, dm)

三.wtforms(表单验证)

首先第一步需要安装:pip3 install wtforms

 1.表单的基本应用:

 1 from flask import Flask, render_template, request, redirect
 2 from wtforms import Form
 3 from wtforms.fields import simple
 4 from wtforms import validators
 5 from wtforms import widgets
 6 
 7 app = Flask(__name__, template_folder='templates')
 8 
 9 app.debug = True
10 
11 
12 class LoginForm(Form):
13     # 字段(内部包含正则表达式)
14     name = simple.StringField(
15         label='用户名',
16         validators=[
17             # 这个就是必填的意思
18             validators.DataRequired(message='用户名不能为空.'),
19             # 控制长度
20             validators.Length(min=6, max=18, message='用户名长度必须大于%(min)d且小于%(max)d')
21         ],
22         # 指定input框渲染成什么样子
23         widget=widgets.TextInput(), # 页面上显示的插件
24         # 如何为input框添加一个类
25         render_kw={'class': 'form-control'}
26 
27     )
28     # 字段(内部包含正则表达式)
29     pwd = simple.PasswordField(
30         label='密码',
31         validators=[
32             # 认证规则就都在这里面写
33             validators.DataRequired(message='密码不能为空.'),
34             validators.Length(min=8, message='用户名长度必须大于%(min)d'),
35             validators.Regexp(regex="^(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[$@$!%*?&])[A-Za-zd$@$!%*?&]{8,}",
36                               message='密码至少8个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符')
37 
38         ],
39         widget=widgets.PasswordInput(),
40         render_kw={'class': 'form-control'}
41     )
42 
43 
44 
45 @app.route('/login', methods=['GET', 'POST'])
46 def login():
47     if request.method == 'GET':
48         form = LoginForm()
49         return render_template('login.html', form=form)
50     else:
51         form = LoginForm(formdata=request.form)
52         if form.validate():
53             print('用户提交数据通过格式验证,提交的值为:', form.data)
54         else:
55             print(form.errors)
56         return render_template('login.html', form=form)
57 
58 if __name__ == '__main__':
59     app.run()
View Code

2.所有的all表单应用:

四.sqlalchemy介绍

五.scoped_session

六.单表操作

七.一对多关系

八.多对多关系

九.flask-sqlalche

sqlalchemy所有操作都在这个网站:https://www.cnblogs.com/xiaoyuanqujing/articles/11715497.html

原文地址:https://www.cnblogs.com/zahngyu/p/11862910.html