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()
2.所有的all表单应用:
四.sqlalchemy介绍
五.scoped_session
六.单表操作
七.一对多关系
八.多对多关系
九.flask-sqlalche
sqlalchemy所有操作都在这个网站:https://www.cnblogs.com/xiaoyuanqujing/articles/11715497.html