python - Flask 基础(1)
这两天稍微接触了一点 Flask 框架,所以分享点基础
1. 配置文件
from flask import Flask app = Flask(__name__)
# 使用自定义的配置文件
app.config.from_object('settings.Config')
"""
# 内部原理 : con = 'settings.Config'
- a,b = con.rsplit('.',maxsplit=1) # 将字符分割
- m = importlib.import_module(a) # 导入settings模块
- class = getattr(m.b) # 拿到settings下的类
""" @app.route('/index')
def index(): return 'index' if __name__ == '__main__':
# print(app.config) # 打印 Flask 下的配置属性
app.run() ################### 配置文件.py #################### class Config(object):
DEBUG = False class ProductionConfig(Config): # 线上环境使用的配置
DEBUG = False class DevelopmentConfig(Config): # 开发环境下使用
DEBUG = True
2. 路由系统
from flask import Flask,render_template,request,redirect,session,url_for app = Flask(__name__) """
endpoint=名字
这个名字就指代了当前视图函数的 url 地址 如果不写 endpoint 那么 url_for 反向解析的默认值就是当前视图函数的名字
- url_for('index')
""" # @app.route('/index',methods=['GET','POST'],endpoint='q1')
@app.route('/index/<int:nid>',methods=['GET','POST'])
def index(nid):
"""
nid -- 接收上面 url 中的参数
接收参数类型:
- @app.route('/index<username>') # 字符
- @app.route('/index<int:nid>') # 整数
- @app.route('/index<float:nid>') # 浮点
- @app.route('/index<path:path>') # 路径
:param nid:
:return:
"""
# print(url_for('q1')) # 反向解析 url : /index
# print(url_for('index')) # 默认 函数名 : /index
# print(url_for('index',nid=333)) # /index/333
return 'INDEX' if __name__ == '__main__':
app.run()
3. 请求和响应
from flask import Flask, render_template, request, redirect, session, url_for, jsonify, make_response app = Flask(__name__) @app.route('/index', methods=['GET', 'POST'])
def index():
"""
常用 响应方式
return 'INDEX'
return jsonify({'k1':k2})
return render_template()
return redirect()
:return:
"""
# 设置响应头
obj = make_response('Index') # 把要返回的字符串,封装到对象中
obj.headers['headers_q'] = 'xxx'
obj.set_cookie('k1','v1')
return obj if __name__ == '__main__':
app.run()
4. 模板
""" 模板渲染:
- 1. 标签解析:
方式一:{{txt|safe}}
方式二:MarpUp -- Markup("<input type='text' />")
- 2. 在模板进行函数调用
方式一:自定义一个函数,然后变成参数传递 -- {{fn(7)}}
方式二:使用 @app.template_global() 来定义一个全局的函数,在所有模板都可用(加括号) -- {{fn1(1,2)}}
方式二:使用 @app.template_filter() 来定义一个全局的函数,在所有模板都可用(加括号) -- {{4|fn2(6,7)}}
- 3. 模板继承:
- 父模板:{% block content %} {% endblock %}
- 子模版:{% extends 'base.html' %}
{% block content %}
{% endblock %} - 4. 在模块中定义 宏
{% macro a(name,type='text',value='') %}
<h1>宏</h1>
<input type="{{type}}" name="{{name}}" value="{{value}}">
{% endmacro %}
{{a('q')}}
"""
from flask import Flask,render_template,request,redirect,session,url_for,jsonify,make_response,Markup,flash,get_flashed_messages app = Flask(__name__) # 全局函数(加括号) - 可以任何模板中使用
@app.template_global()
def fn1(a1,a2):
return a1+a2 # 参数放的方式不一样,可以用于判断条件
@app.template_filter()
def fn2(a1,a2,a3):
return a1+a2+a3 def fn(arg):
return arg @app.route('/index',methods=["GET","POST"])
def index():
print('index')
info = {
'lis':[1,2,3],
'txt':"<input type='text' />",
'txt1':Markup("<input type='text' />"),
'fn':fn
}
return render_template('models.html',**info) if __name__ == '__main__':
app.run()
5. session 简单了解
"""
# 当请求刚到来的时:flask 读取cookie 中对应的值,将值解密,并放反序列化成字典,放入内存,以便视图函数使用
# 当请求结束时,flask 会读取内存中字典的值,进行序列化和加密,写入 Cookie 中 - 只能取一次 session 值:
from flask import Falsk, flash, get_fiashed_messages flash('k1') -- 存放一个值到 session 中
- 可以分类:
flash('k1','error')
flash('k2','error')
flash('k3','info')
get_flashed_messages() -- 只能获取一次 session 的值
- 可以只拿分类中的数据
get_flashed_messages(category_filter=['error'])
"""
6. 特殊装饰器 -- 类似于 Django 中的中间件
from flask import Flask
app = Flask(__name__) """
执行顺序:
1. before -> Index -> after
2. before1 -> before2 -> Index -> after2 -> after1
3. before1(如果return) --> after2 -> after1 定制错误页面:
@app.errorhandler(404)
def not_found(arg):
return xxx.html """ @app.before_request
def x1():
print('before') @app.after_request
def x2(response):
print('after')
return response @app.route('/index')
def index():
print('index')
return 'Index' if __name__ == '__main__':
app.run()
7. 中间件
"""
- call 触发条件:
- 用户发起请求时执行
"""
from flask import Flask
app = Flask(__name__) class Middleware(object):
def __init__(self,old):
self.old = old def __call__(self, *args, **kwargs):
ret = self.old(*args, **kwargs)
return ret if __name__ == '__main__':
app.wsgi_app = Middleware(app.wsgi_app)
app.run()
持续更新...
python - Flask 基础(1)的更多相关文章
- python flask 基础入门
1. Flask 中的Hello World! 在使用pycharm创建一个Flask项目后,将会默认创建一个flask的app,这里来讲下每行代码表示的意义,代码入下 from flask impo ...
- python - Flask 基础 - 蓝图( Blueprint )(2)
""" 蓝图:为开发者提供的目录结构 - 使用: 1. 根目录创建一个跟项目名一样的文件 - 创建后第一步,在这个文件夹中添加一个 __init__.py 的配置文件 - ...
- 知了课堂 Python Flask零基础 笔记整理
目录 起步 安装Python2.7: Python虚拟环境介绍与安装: pip安装flask: 认识url: URL详解 web服务器和应用服务器以及web应用框架: Flask 第一个flask程序 ...
- [Python][flask][flask-login]关于flask-login中各种API使用实例
本篇博文跟上一篇[Python][flask][flask-wtf]关于flask-wtf中API使用实例教程有莫大的关系. 简介:Flask-Login 为 Flask 提供了用户会话管理.它处理了 ...
- python Flask
python Flask Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请 ...
- Python Flask Restful
Flask Restful 1.flask restful 在flask基础上进行一些封装,主要用于实现restful接口 2.restful的理解 1)URI(统一资源标识符):每一个URI代表一 ...
- Python+Flask+MysqL的web建设技术过程
一.前言(个人学期总结) 个人总结一下这学期对于Python+Flask+MysqL的web建设技术过程的学习体会,Flask小辣椒框架相对于其他框架而言,更加稳定,不会有莫名其妙的错误,容错性强,运 ...
- flask基础之jijia2模板语言进阶(三)
前言 前面学习了jijia2模板语言的一些基础知识,接下来继续深挖jijia2语言的用法. 系列文章 flask基础之安装和使用入门(一) flask基础之jijia2模板使用基础(二) 控制语句 和 ...
- flask基础之jijia2模板使用基础(二)
前言 在以前前后端不分离的时代,后台程序员往往又当爹又当妈,需要将前端程序员写的h5页面填充模板语言.而jijia2是一门十分强大的python的模板语言,是flask框架的核心模块之一.先简单介绍一 ...
随机推荐
- 018 Android Activity界面移入与移出的动画效果
1.平移动画 上一页移入动画 (-屏幕宽度,y)------>(0,y) 上一页移出动画 (0,y)-------------->(屏幕宽度,y) 下一页移入动画 (屏幕宽度,y)---- ...
- [转帖]Hive基础(一)
Hive基础(一) 2018-12-19 15:35:03 人间怪物 阅读数 234 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接 ...
- noip2019集训测试赛(二十一)Problem B: 红蓝树
noip2019集训测试赛(二十一)Problem B: 红蓝树 Description 有一棵N个点,顶点标号为1到N的树.N−1条边中的第i条边连接顶点ai和bi.每条边在初始时被染成蓝色.高桥君 ...
- 考试应对(Java语法速览)
1.从命令行输入数据 格式:Scanner reader=new Scanner(System.in); 此reader对象可以使用的方法:nextBoolean(),nextByte(),nextS ...
- 数据结构-单链表-类定义2-C++
上一次的C++链表实现两个单链表的连接不太理想,此次听了一些视频课,自己补了个尾插法,很好的实现了两个链表的连接,当然了,我也是刚接触,可能是C++的一些语法还不太清楚,不过硬是花了一些时间尽量在数据 ...
- wc 指令
统计文件的行数, 字符数, 字节数. wc 命令的功能相对简单,参数也较少,但是是统计文本行数,字符数的利器.具体的参数和用法如下 语法 wc [OPTION]... [FILE]... wc [OP ...
- JPA 一对一 一对多 多对一 多对多配置
1 JPA概述 1.1 JPA是什么 JPA (Java Persistence API) Java持久化API.是一套Sun公司 Java官方制定的ORM 方案,是规范,是标准 ,sun公司自己并没 ...
- C/C++ cmake example
学习 Golang,有时需要 Cgo,所以需要学习 C.C++. 语言入门: https://item.jd.com/12580612.html https://item.jd.com/2832653 ...
- <a>的javascript+jquery编程实例之删除(定位节点与事件绑定)
相关jquery方法 parent(), remove() //上传图片 article_create.js article_edit.js function uploadAttachment() { ...
- .net core使用CSRedisCore连接哨兵集群,并用作redis使用分布式缓存。
CSRedisCore是国内大佬出品的一个Redis-Cli-SDK. Github地址:https://github.com/2881099/csredis 使用此插件作为分布式缓存也十分简单. 一 ...