博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FLASK基础
阅读量:4686 次
发布时间:2019-06-09

本文共 6158 字,大约阅读时间需要 20 分钟。

一、配置文件

Flask的配置文件 

app.config     Config对象的本质是一个字典

flask中的配置文件是一个flask.config.Config对象(继承字典),默认配置为:    {        'DEBUG':                                get_debug_flag(default=False),  是否开启Debug模式        'TESTING':                              False,                          是否开启测试模式        'PROPAGATE_EXCEPTIONS':                 None,                                  'PRESERVE_CONTEXT_ON_EXCEPTION':        None,        'SECRET_KEY':                           None,        'PERMANENT_SESSION_LIFETIME':           timedelta(days=31),        'USE_X_SENDFILE':                       False,        'LOGGER_NAME':                          None,        'LOGGER_HANDLER_POLICY':               'always',        'SERVER_NAME':                          None,        'APPLICATION_ROOT':                     None,        'SESSION_COOKIE_NAME':                  'session',        'SESSION_COOKIE_DOMAIN':                None,        'SESSION_COOKIE_PATH':                  None,        'SESSION_COOKIE_HTTPONLY':              True,        'SESSION_COOKIE_SECURE':                False,        'SESSION_REFRESH_EACH_REQUEST':         True,        'MAX_CONTENT_LENGTH':                   None,        'SEND_FILE_MAX_AGE_DEFAULT':            timedelta(hours=12),        'TRAP_BAD_REQUEST_ERRORS':              False,        'TRAP_HTTP_EXCEPTIONS':                 False,        'EXPLAIN_TEMPLATE_LOADING':             False,        'PREFERRED_URL_SCHEME':                 'http',        'JSON_AS_ASCII':                        True,        'JSON_SORT_KEYS':                       True,        'JSONIFY_PRETTYPRINT_REGULAR':          True,        'JSONIFY_MIMETYPE':                     'application/json',        'TEMPLATES_AUTO_RELOAD':                None,    }

 

修改配置的方式

方式一:

app.config["参数"] = value

app.secret_key = value

'''修改配置文件方式一'''print(app.config.get('DEBUG'))      # Falseapp.config['DEBUG'] = True   # 修改配置文件的DEBUG属性print(app.config.get('DEBUG'))      # True

 

方式二:

app.config.from_pyfile("python文件名称")    如:        settings.py            DEBUG = True        app.config.from_pyfile("settings.py")app.config.from_envvar("环境变量名称")    环境变量的值为python文件名称名称,内部调用from_pyfile方法app.config.from_json("json文件名称")    JSON文件名称,必须是json格式,因为内部会执行json.loadsapp.config.from_mapping({
'DEBUG':True}) 字典格式app.config.from_object("python类或类的路径") app.config.from_object("settings.MySetting") # settings.py的MySetting类

 

 

二、路由

  • @app.route('/user/<username>')
  • @app.route('/post/<int:post_id>')
  • @app.route('/post/<float:post_id>')
  • @app.route('/post/<path:path>')
  • @app.route('/login', methods=['GET', 'POST'])

常用路由系统有以上五种,所有的路由系统都是基于一下对应关系来处理:

转换器类型,为变量指定规则:

string (缺省值) 接受任何不包含斜杠的文本
int 接受正整数
float 接受正浮点数
path 类似 string ,但可以包含斜杠
uuid 接受 UUID 字符串
DEFAULT_CONVERTERS = {    'default':          UnicodeConverter,    'string':           UnicodeConverter,    'any':              AnyConverter,    'path':             PathConverter,    'int':              IntegerConverter,    'float':            FloatConverter,    'uuid':             UUIDConverter,}

示例:

from flask import Flask,redirect,url_forapp = Flask(__name__)# endpoint 指向函数的名字@app.route("/book/
",endpoint="book")def book(newid): print(newid,type(newid)) # 123
return "Book页面"# methods= 指定请求方式的列表@app.route("/",methods=['GET','POST']) def index(): return redirect(url_for("book",newid=123)) # 反向解析if __name__ == '__main__': app.run()

 

访问的URL

1.URL 是中规中举的,尾部有一个斜杠,看起来就如同一个文件夹。 访问一个没有斜杠结尾的 URL 时 Flask 会自动进行重定向,帮你在尾部加上一个斜杠。

2. URL 没有尾部斜杠,因此其行为表现与一个文件类似。如果访问这个 URL 时添加了尾部斜杠就会得到一个 404 错误。这样可以保持 URL 唯一,并帮助 搜索引擎避免重复索引同一页面。

 

三、静态文件

动态的 web 应用也需要静态文件,一般是 CSS 和 JavaScript 文件。理想情况下你的 服务器已经配置好了为你的提供静态文件的服务。但是在开发过程中, Flask 也能做好 这项工作。只要在你的包或模块旁边创建一个名为 static的文件夹就行了。 静态文件位于应用的 /static 中。

使用特定的 'static' 端点就可以生成相应的 URL

url_for('static', filename='style.css')

这个静态文件在文件系统中的位置应该是 static/style.css 。

 

四、请求和响应

导入request和Response

from flask import Flask,request,Response

# 请求相关信息# request.method# request.args# request.form# request.values# request.cookies# request.headers# request.path# request.full_path# request.script_root# request.url# request.base_url# request.url_root# request.host_url# request.host# request.files# obj = request.files['the_file_name']# obj.save('/var/www/uploads/' + secure_filename(f.filename))# 响应相关信息# return "字符串"# return render_template('html模板路径',**{})# return redirect('/index.html')# response = make_response(render_template('index.html'))# response是flask.wrappers.Response类型# response.delete_cookie('key')# response.set_cookie('key', 'value')# response.headers['X-Something'] = 'A value'# return response

示例:

from flask import Flaskfrom flask import request,Responsefrom flask import render_templatefrom flask import make_responseapp = Flask(__name__)@app.route("/")def index():    print(request.method)   # 请求    '''    自定义响应    '''    response = make_response(render_template("index.html"))    response.set_cookie("key","value")      # 响应设置cookie    return response    # return render_template("index.html")        # 响应if __name__ == '__main__':    app.run()

 

五、模板

1、模板的使用

Flask使用的是Jinja2模板,所以其语法和Django无差别

2、自定义模板方法

Flask中自定义模板方法的方式和Bottle相似,创建一个函数并通过参数的形式传入render_template

'''示例一'''from flask import Flaskfrom flask import url_forfrom flask import render_templateapp = Flask(__name__)book_list = [    {
"id":1,"title":"python1"}, {
"id":2,"title":"python2"}, {
"id":3,"title":"python3"},]@app.route("/book")def book(): return render_template("book.html",book_list=book_list)if __name__ == '__main__': app.run()
Title{
% for book in book_list %}

{

{book.title}}

{
% endfor %}
实例1的HTML

 

 

'''实例二'''from flask import Flaskfrom flask import render_templateapp = Flask(__name__)mydict = {
'key':"value"}def myfunc(): return "

函数返回的内容

"@app.route('/test')def test(): return render_template("test.html",**{
"mydict":mydict,"myfunc":myfunc}) # 传入的字典需要打散if __name__ == '__main__': app.run()
    
Title

{

{mydict.get('key')}}0

{

{mydict["key"]}}1

{
{myfunc()|safe}}
实例2的HTML

 

转载于:https://www.cnblogs.com/st-st/p/10185943.html

你可能感兴趣的文章
wpf企业应用之主从结构列表
查看>>
AngularJS 承诺 Promise
查看>>
CDN全局流量调度算法介绍
查看>>
Word 2007 目录生成技巧
查看>>
linux网络协议栈--路由流程分析
查看>>
weblogic.jms.common.MessageFormatException: JMSClientExceptions: Invalid property name
查看>>
python3使用urlllib爬虫1
查看>>
值得收藏的十二条Jquery随身笔记
查看>>
当DiscuzNT遇上了Loadrunner(下)(转)
查看>>
mysql学习之join用法
查看>>
UIScrollView+UIPageControl 图片切换加分页标示
查看>>
【未有之有】洛依文明相关
查看>>
源代码安装GIT
查看>>
电脑上报缺失msvcr100d.dll 处理(转)
查看>>
Java 开发中的对象拷贝
查看>>
创建型模式的特点和分类
查看>>
Python学习笔记——基础篇【第五周】——常用模块学习
查看>>
CentOS7.3编译安装Nginx设置开机启动
查看>>
个数是如何用大数据做行为预测的?
查看>>
孤荷凌寒自学python第七十六天开始写Python的第一个爬虫6
查看>>