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

  • 相关阅读:
    开源项目
    [Accessibility] Missing contentDescription attribute on image [可取行]失踪contentDescription属性图像
    Android 布局 中实现适应屏幕大小及组件滚动
    EF 错误记录
    EasyUI 加载时需要显示和隐藏 panel(面板)内容破版问题
    IE 报表缩放后页面破版
    VS 2017 引入nuget 问题
    SSRS 报表显示页面 asp net session丢失或者找不到 asp net session has expired or could not be found()
    log4net 配置
    网站
  • 原文地址:https://www.cnblogs.com/zahngyu/p/11862910.html
Copyright © 2011-2022 走看看