Flask开发 经验技巧总结

CuterCorley 等级 684 0 0

Flask作为一个主流的Python Web框架之一,有比较广泛的应用,但是有经验的小伙伴可能知道,这里边其实也有很多坑,让你不得不防,在使用的过程中可以积累一些经验。

1.Flask中的Referer不是referer

做过爬虫的小伙伴都知道,referer是指页面的跳转,即从哪一个页面跳转到当前页,很多网站也通过该属性对爬虫采取了一定的限制。在Flask中也有referer这个概念,意义也相同,但是写法就变了,变成了referrer,你可得注意啦,多了一个r!!!

2.为视图访问增加计时器

有的时候,我们会有这种需求,在网页中显示该网页的访问数量,此时就需要增加计时器,但是一般的计时器会存在一些问题: (1)WSGI服务器会将Flask服务生成多个进程,每个进程都有自己的独立副本,重复的请求会由不同的进程处理,从而产生不同步的值; (2) 假如Flask服务异常终止,计数就会清零。

此时可以按照如下方法解决: (1)multiprocessing模块; (2)保存到数据库中。

第一种方式原理为: 使用Python自带库multiprocessing.Value,只要在创建值后生成进程,就可以跨进程同步对共享值的访问,如下:

from flask import Flask, jsonify
from multiprocessing import Value

counter = Value('i', 0)
app = Flask(__name__)

@app.route('/')
def index():
    with counter.get_lock():
        counter.value += 1

    return jsonify(count=counter.value)

app.run(processes=8)

此时可以实现同步计时,但是如果应用程序进程分布在多台计算机上,则共享内存也会存在问题:它们仅在本地计算机上同步,而不是在网络上同步。

最可靠的还是直接将计数保存到数据库,对于访问路由对应的对象模型增加一个字段,每访问一次就操作数据库,对该字段加一,这样就不存在上面的问题了。

本文原文首发来自博客专栏Python Web开发实战,由本人转发至https://www.helloworld.net/p/7RBT9YtZwfjG,其他平台均属侵权,可点击https://blog.csdn.net/CUFEECR/article/details/106955224查看原文,也可点击https://blog.csdn.net/CUFEECR浏览更多优质原创内容。

收藏
评论区

相关推荐

Flask--如何在pycharm中导入并运行flask项目
一.导入flask项目FileOpen选择需要导入flask项目(如项目名为flasky)。 二.设置解释器FileSettingsProject Interpreter,如下图所示三.添加Flask server1.点击pycharm右上角的Add Configuration2.点击+号,选择Flask Server3.填写参数4.运行项目点击pychar
CTF SSTI(服务器模板注入)
基本判断 ==== ![](https://oscimg.oschina.net/oscnet/cde22db0fb63123db44fbcc3350a8e9c054.png) 渲染模板 ==== flask/jinja ----------- flask SSTI的基本思路就是利用python中的魔术方法找到自己要用的函数 __dict_
Flask 教程 第一章:Hello, World!
本文翻译自[The Flask Mega-Tutorial Part I: Hello, World!](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fblog.miguelgrinberg.com%2Fpost%2Fthe-flask-mega-tutorial-part-i-hello
Ajax 跨域请求 Flask 页面请求不到的解决
参考: [http://stackoverflow.com/questions/25860304/how-do-i-set-response-headers-in-flask](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fstackoverflow.com%2Fquestions%2F2
Flask restful_api服务器端
[使用python的Flask实现一个RESTful API服务器端](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fwww.cnblogs.com%2Fvovlie%2Fp%2F4178077.html) -----------------------------------------
Flask 【第四篇】使用Flask的扩展实现简单页面登录功能
from flask import Flask,render_template,request,redirect,session app = Flask(__name__,template_folder='templates') app.secret_key = "sdsfdsgdfgdfgfh" @app.befo
Flask, Django
### 1\. 目录结构 一般情况下,Django很系统、统一。Flask项目目录风格不同一,即使用上了蓝图。 ### 2\. 数据库迁移 Flask要用第三方extensions,而Django自带,这个很方便。 ### 3\. 模块化 Flask是用蓝图。Django可以自动生成`python manage.py startapp <app_n
Flask从入门到精通之使用Flask
  Flask-SQLAlchemy 是一个Flask 扩展,简化了在Flask 程序中使用SQLAlchemy 的操作。SQLAlchemy 是一个很强大的关系型数据库框架,支持多种数据库后台。SQLAlchemy 提供了高层ORM,也提供了使用数据库原生SQL 的低层功能。   和其他大多数扩展一样,Flask-SQLAlchemy 也使用pip 安装
Flask做api+angularjs调用实现获取数据及删除的完整实例
在oschina开源中国学习到不少东西,今天回馈下. 现用python框架flask做api很方便,angular用久了有依赖了,为方便后面的同学,给出个完整实例. ##FLASK部分,用到了flask-json,和一个转json的方法 ###当然你也可以用flask的api专用插件,但我在现实场景用的时间,有些地方不是很方便,大家如果是做app应用,可以用
Flask入门教程(五)GET和POST
### 软硬件环境 * Windows 10 64bit * Anaconda3 with python 3.7 * PyCharm 2019.3 * Flask 1.1.1 ### HTTP简介 `HTTP`是`HyperText Transfer Protocol`的缩写,它是互联网数据传输的
Flask教程(十五)日志
### 软硬件环境 * windows 10 64bit * anaconda3 with python 3.7 * pycharm 2020.1.2 * flask 1.1.2 ### 简介 `flask`日志使用标准的`python``logging`。所有与`flask`相关的消息都用`ap
Flask框架
FLask框架的简单介绍 ------------ Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用
Flask框架总结
**Flask介绍:** Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助j
Flask的多app应用,多线程如何体现
一、多app应用 在一个py文件中创建多个Flask的app对象 ![复制代码](https://oscimg.oschina.net/oscnet/824b0db737cc7ccf7731266f53769f27ac2.gif) from werkzeug.wsgi import DispatcherMiddleware from w
Python全栈快餐教程(1)
Python全栈快餐教程(1) - 用Flask处理HTTP请求 ================================ 初识Flask ------- Flask是最流行的Python web框架之一。 我们来写个最小的web应用,只有一个路由先跑进来玩玩吧。 from flask import Flask #