• 简单了解下Flask


    简单开发所需了解的

    传递URL参数

    通过使用route()方法可以将一个普通函数和特定的URL关联起来,而一个函数可以使用多个URL装饰器来装饰,可以实现多个URL请求由一个函数产生的内容回应(01),获取的URL参数需要在URL装饰器和业务函数中分别进行定义和处理。
    一般有如下两种形式的URL变量规则(URL装饰器中的URL字符串写法)(02表单发送post请求)

    /hello/<name> # 一般是字符串Url链接中的传给<name>
    /hello/<int:id> # 一般是数字Url链接中的传给<name>
    

    使用会话和cookie(04)

    使用会话和cookie可以存储客户端与服务端的交互状态。
    在Flask框架中获取cookie

    flask.request.cookies.get('name')
    

    使用make_response对象设置cookie
    resp = make_respone(content) # content返回页面内容
    resp.set_cookie('username','the username') # 设置名为username的cookie

    使用Flask-script扩展(05)

    该插件自带了一组常用选项,而且还支持自定义命令。
    可以输入当前网站的ip地址和端口作为运行。这可以不再脚本中把参数传递给app.run()函数,采用命令行的方式传递更加友好。

    使用模板(06)

    模板是一个包含响应文本的文件。其中包含用占位变量表示的动态部分,其具体值在请求的上下文中才能直到。使用真实值替换变量,在返回最终响应的字符串,这一过程称为渲染。

    模板变量

    {{ name }},这是一种特殊的占位符,用于告诉模板引擎这个位置的值从渲染模板时使用的数据中获取,模板变量中的数据可以是很多种类型的数据,如列表,字典和对象(对象可以使用.方法函数)。

    过滤器

    把过滤器添加在变量名之后,在中间用竖线分隔,{{ name|safe }}
    Jinja2提供的常用模板过滤器
    safe:在渲染值时不转义
    capitalize:把值得首字母转换才大写形式,其他字母转换为小写
    lower:把值转换为小写
    upper:把值转换为大写

    title:把值中每个单词首字母转换为大写
    trim:把值得首位空格去掉
    striptags:渲染之前把所有值中所有得HTML标签都删掉。
    特别需要注意,有时候模板变量若是html标签,如<h1>hello</h1>,这时候模板变量渲染会将其转化为<h1>hello</h1%gt;
    这就达不到我们想让浏览器来解释这个标签得意思,所以可以使用safe过滤器,这时候该标签就会以html标签样式展现出来。

    控制结构

    {% if value %}
    hello , {{ value }}
    {% else %}
    hello , you
    {% endif %}
    

    for循环

    <ul>
    {% for comment in comments %}
    <li>{{ comment }}</li>
    {% endfor %}
    </ul>
    

    宏功能(类似python的函数)

    1、把它看作jinja2的一个函数,这个函数可以返回一个html字符串
    2、目的:代码可以复用,避免代码冗余
    在模版中直接定义:类似于macro1.html中定义方式

    {% macro render_comment(comment) %}
    <li>{{ comment }}</li>
    {% endmacro %}
    <ul>
    {% for comment in comments %}
    {{ render_comment(comment)}}
    {% endfor %}
    </ul>
    

    将所有的宏提取到一个模版中macro.html,重复使用宏功能,可以将他保存在单独的文件中,并在需要导入的模板中导入。
    导入方法:

    {% import 'macro.html' as macros %}
    <ul>
    {% for comment in comments %}
    {{ macros.render_comment(comment) }}
    {% endfor %}
    

    模板继承(08)(在我的谷歌浏览器中更改html文件样式并不会马上刷新在浏览器中更改,需要退出,重新运行)

    编写个base.html文件,然后再在该文件中使用{% block head %} {% endblock %};{% belock body %}{% endblock %};{% block script %}{% endblock %}等这些使用block标签。然后在继承的文件中在这些定义的block标签中进行修改,叫修改。
    使用{% extends 'base.html' %}在需要继承文件的顶部填写。
    要在继承的文件中'复用',使用{{ super() }},缘由是继承只要你导入了,就算没输入,也就是空,那你这个子类也就是空,导入是指导入了block标签{% block name %},要么不导入,就是继承,这可不像多态,可以共存,有点像类变量,父元素的类变量大导入如果你初始化__init__(self)了,需要导入父元素的类变量,需要使用super()函数。

    使用Flask-Bootstrap扩展

    pip install flask-bootstrap(07)
    该插件是集成的Bootstrap组件,只需初始换Flask-Bootstrap之后,就可以在程序中使用一个包含所有Bootstrap文件的基模板。

    from flask import Flask,render_template
    from flask_bootstrap import Bootstrap
    
    app = Flask(__name__) 
    bootstrap = Bootstrap(app) #初始化Bootstrap组件在该程序中
    

    使用Flask-Momment扩展本地化日期和时间

    Momment.js是一个简单易用的轻量级javascript日期处理类库,提供了日期格式化和解析功能。
    初始化Flask-Momment的代码

    from flask.ext.moment import Moment
    moment =Moment(app)
    

    Flask-Momment依赖于moment.js和jquery.js,这两个文件需要直接包含在HTML文档中。
    在HTML标签中导入moment.js和jquery.js

    {{ moment.include_jquery() }}
    {{ moment.include_moment() }}
    
    <!--使用中文,默认是英文>
    {{ moment.lang('zh-CN')}}
    

    表单操作(09)(若同时应用多个class,如果有相当的定义,那么后定义的优先)

    pip install flask-wtf
    在默认情况下flask-wtf能防止所有表单收到跨站请求伪造攻击(CSRF攻击),他需要为程序设置一个密钥,flask-wtf使用这个密钥生成加密令牌,再用令牌验证请求中表单数据的真伪。

    app = Flask(__name__)
    app.config['SECRET_KEY'] = 'aaa'
    

    app.config字典用来存储框架,扩展和程序本身的配置变量,使用标准的字典句法就能把配置值添加到app.config对象中。

    WTForms可以支持如下HTML标准字段

    • StringField:文本字段
    • TextAreaField:多行文本字段
    • PasswordField:密码文本字段
    • HiddeField:隐藏文本字段
    • DateField:文本字段,值为datetime.date格式
    • DateTimeField:文本字段,值为datetime.datetime格式
    • IntegerField:文本字段,值为整数
    • DecimalField:文本字段,值为decimal.Decimal
    • FloatField:文本字段,值为浮点数
    • BooleanField:复选框,值为True和False
    • RadioField:一组单选框
    • SelectField:下拉列表
    • SelectMultipleField:下拉列表,可选择多个值
    • FileField:文件上传字段
    • SubmitField:表单提交按钮
    • FormField:把表单作为字段嵌入另一个表单中
    • FieldList:一组指定类型的字段

    在WTForms中包含如下内置验证函数

    • Email:验证电子邮件地址
    • EqualTo:比较两个字段的值,常用于要求对两次输入的密码进行确认的情况
    • IPAdress:验证IPV4网络地址
    • Length:验证输入字符串的长度
    • NumberRange:验证输入的值在数字范围内
    • Optional:当无输入值时跳过其他验证函数
    • Required:确定字段中有数据
    • Regexp:使用正则表达式验证输入值
    • URL:验证URL
    • AnyOf:确保输入值在可选值列表
    • Noneof:确保输入值不在可选值列表中

    使用文件上传(10)

    form(表单中)的enctype属性值

    1.application/x-www-form-urlencoded:在发送前编码所有字符(默认)
    2.multipart/form-data: 不对字符编码,或在使用包含文件上传控件的表单时,必须使用该值。
    3.text/plain:空格转换为 "+" 加号,但不对特殊字符编码。

    form中的action

    必需的 action 属性规定当提交表单时,向何处发送表单数据。
    绝对 URL - 指向其他站点(比如 src="www.example.com/example.htm")
    相对 URL - 指向站点内的文件(比如 src="example.htm")
    action="" //一般可以为空的,这里的双引号都要有的,表示提单提交给自己(也就是当前页处理)
    如果是 action="?" 就是提交给自己 ,提交到本目录的默认主页(与上方是不同的)

    使用数据库

    pip install flask-sqlalchem
    数据库使用URL指定。其中流行的数据库引擎采用的数据库URL格式如下:

    • MySQL:mysql://username:password@hostname/database
    • Postgres:postgresql://username:password@hostname/database
    • SQLite(Unix):sqlite:////absolute/path/to/database
    • SQLite(Windows):sqlite:///c:absolute/path/to/database
      hostname本地指的是localhost

    收发电子邮件

    pip install flask-mail

    项目实战

    努力拼搏吧,不要害怕,不要去规划,不要迷茫。但你一定要在路上一直的走下去,尽管可能停滞不前,但也要走。
  • 相关阅读:
    怎么打jar包 jar怎么运行
    ORACLE directory 目录
    materialized view 和snapshot
    OS级别kill 进程
    ORA01843 not a valid month
    物化视图 Materialized View
    oracle数据字典
    在oracle中如何退出edit模式
    Oracle临时表
    Oracle 查看 对象 持有 锁 的情况 (添加了V$SQL视图,这样可以一起查出具体导致这种锁的SQL语句,一次性就搞定了)
  • 原文地址:https://www.cnblogs.com/wkhzwmr/p/15530909.html
Copyright © 2020-2023  润新知