zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    【微信公众号开发】【13】批量导出公众号所有用户信息到Excel
    【实战问题】【1】@PostConstruct 服务启动后加载两次的问题
    敌兵布阵(树状数组)
    Java大数应用
    Exponentiation(java 大实数)
    确定比赛名次(拓扑排序)
    487-3279(输入外挂)
    More is better(并查集)
    How Many Tables(并查集)
    Convex(扫描线降维)
  • 原文地址:https://www.cnblogs.com/zahngyu/p/11862910.html
Copyright © 2011-2022 走看看