详解Python的Flask框架中生成SECRET_KEY密钥的方法
引子
如果遇到了 Must provide secret_key to use csrf错误提醒,原因就是没有设置secret_key ,在代码中加上
app.config[‘SECRET_KEY‘]=‘xxx‘
SECRET_KEY最好不要写在代码中。
最好设置一个config.py文件,从中读取该内容
config.py
CSRF_ENABLED = True SECRET_KEY = ‘you-will-never-guess‘
app.py
app.config.from_object(‘config‘)
这样就可以防止csrf了。
嗯,接下来我们就来说说这个SECRET_KEY:
Flask生成SECRET_KEY(密钥)的一种简单方法
SECRET_KEY是Flask中比较重要的一个配置值。本文介绍一种比较简单的生成SECRET_KEY的方法。
Session, Cookies以及一些第三方扩展都会用到SECRET_KEY值,这是一个比较重要的配置值,应该尽可能设置为一个很难猜到的值,随机值更佳。
随机的问题在于很难判断什么是真随机。一个密钥应该足够随机。你的操作系统可以基于一个密码随机生成器来生成漂亮的随机值,这个值可以用来做密钥:
>>> import os >>> os.urandom(24) '\xca\x0c\x86\x04\x98@\x02b\x1b7\x8c\x88]\x1b\xd7"+\xe6px@\xc3#\\'
把这个值复制粘贴到你的代码,你就搞定了密钥。
设置方法:
app = Flask(__name__) app.config['SECRET_KEY'] = '\xca\x0c\x86\x04\x98@\x02b\x1b7\x8c\x88]\x1b\xd7"+\xe6px@\xc3#\\' # or app.secret_key = '\xca\x0c\x86\x04\x98@\x02b\x1b7\x8c\x88]\x1b\xd7"+\xe6px@\xc3#\\' # or app.config.update(SECRET_KEY='\xca\x0c\x86\x04\x98@\x02b\x1b7\x8c\x88]\x1b\xd7"+\xe6px@\xc3#\\')
相关推荐
-
深度定制Python的Flask框架开发环境的一些技巧总结
Flask 环境配置 你的应用程序可能需要大量的软件包才能正常的工作.如果都不需要 Flask 包的话,你有可能读错了教程.当应用程序运行的时候,你的应用程序的 环境 基本上是所有一切事情的根基.我们是幸运的,因为有许多方式使得我们能够轻松地管理我们的环境. 使用 virtualenv 管理你的环境 virtualenv是用于在所谓 虚拟环境 中隔离你的应用程序的一个工具.一个虚拟环境是包含了你的应用依赖的软件的一个目录.一个虚拟环境也能够改变你的环境变量以维持你的开发环境包含的环境变量.不用下
-
Python的Flask框架中的Jinja2模板引擎学习教程
Flask的模板功能是基于Jinja2模板引擎来实现的.模板文件存放在当前目前下的子目录templates(一定要使用这个名字)下. main.py 代码如下: from flask import Flask, render_template app = Flask(__name__) @app.route('/hello') @app.route('/hello/<name>') def hello(name=None): return render_template('hello.html
-
Python的Flask框架标配模板引擎Jinja2的使用教程
Jinja2需要Python2.4以上的版本. 安装 按照Jinja有多种方式,你可以根据需要选择不同的按照方式. 使用easy_install 或pip: #sudo easy_install Jinja2 #sudo pip install Jinja2 这两个工具可以自动从网站上下载Jinja,并安装到python目录的site-packages目录中. 从tar包安装: # 下载Jinja的安装包 # 解压缩 # sudo python setup.py install 基本API用法
-
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
Python基础环境搭建 CENTOS 6.X 系列默认安装的 Python 2.6 ,目前开发中主要是使用 Python 2.7 ,这两个版本之间还是有不少差异的,程序在 Python 2.6 下经常会出问题. 比如: re.sub 函数 ,2.7 支持 flags 参数,而 2.6 却不支持. 所以,打算安装 Python 2.7 来运行 Flask 应用程序,但 2.6 不能删除,因为系统对它有依赖. 1.安装 sqlite-devel 因为 Flask 应用程序可能使用能 Sqlite
-
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
使用Flask-SQLAlchemy管理数据库 Flask-SQLAlchemy是一个Flask扩展,它简化了在Flask应用程序中对SQLAlchemy的使用.SQLAlchemy是一个强大的关系数据库框架,支持一些数据库后端.提供高级的ORM和底层访问数据库的本地SQL功能. 和其他扩展一样,通过pip安装Flask-SQLAlchemy: (venv) $ pip install flask-sqlalchemy 在Flask-SQLAlchemy,数据库被指定为URL.表格列出三个最受欢
-
Python的Flask框架使用Redis做数据缓存的配置方法
Redis是一款依据BSD开源协议发行的高性能Key-Value存储系统.会把数据读入内存中提高存取效率.Redis性能极高能支持超过100K+每秒的读写频率,还支持通知key过期等等特性,所以及其适合做缓存. 下载安装 根据redis中文网使用wget下载压缩包 $ wget http://download.redis.io/releases/redis-3.0.5.tar.gz $ tar xzf redis-3.0.5.tar.gz $ cd redis-3.0.5 $ make 二进制文
-
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
表单是让用户与我们的网页应用程序交互的基本元素.Flask 本身并不会帮助我们处理表单,但是 Flask-WTF 扩展让我们在我们的 Flask 应用程序中使用流行的 WTForms 包.这个包使得定义表单和处理提交容易一些. Flask-WTF 我们想要使用 Flask-WTF 做的第一件事情(在安装它以后,GitHub项目页:https://github.com/lepture/flask-wtf )就是在 myapp.forms 包中定义一个表单. # ourapp/forms.py fr
-
python flask 多对多表查询功能
我们在flask的学习中,会难免遇到多对多表的查询,今天我也遇到了这个问题.那么我想了好久.也没有想到一个解决的办法,试了几种方法,可能是思路的限制我放弃了,后来,我就在网上百度,可是发现百度出来的结果和自己想要的还有一定的差距,那么我根据百度上得来的思路,那么我也对我的数据结构进行了探索, 下面来看看我这里怎么来查询的,首先给大家看下我写的数据库的代码的片段,这样,加深理解. post_class=db.Table('post_class', db.Column('post_id',db.In
-
详解Python的Flask框架中生成SECRET_KEY密钥的方法
引子 如果遇到了 Must provide secret_key to use csrf错误提醒,原因就是没有设置secret_key ,在代码中加上 app.config['SECRET_KEY']='xxx' SECRET_KEY最好不要写在代码中. 最好设置一个config.py文件,从中读取该内容 config.py CSRF_ENABLED = True SECRET_KEY = 'you-will-never-guess' app.py app.config.from_object(
-
详解Python的Flask框架中的signals信号机制
Flask 提供了信号(Signals)功能,是一种消息分发机制.类似于钩子(Hooks).使用信号功能可以降低程序的耦合,分解复杂的业务模型.例如在更新了产品数据后,可以发送一个信号.当有需要对产品数据进行处理的功能时,就可以捕获信号进行处理.比如要建立产品缓存,或是更新搜索索引等. 定义信号 Flask 信号功能使用了 Blinker 模块,所以需要先安装 Blinker 模块 pip install blinker 定义一个信号: from blinker import Namespace
-
详解Python的Twisted框架中reactor事件管理器的用法
铺垫 在大量的实践中,似乎我们总是通过类似的方式来使用异步编程: 监听事件 事件发生执行对应的回调函数 回调完成(可能产生新的事件添加进监听队列) 回到1,监听事件 因此我们将这样的异步模式称为Reactor模式,例如在iOS开发中的Run Loop概念,实际上非常类似于Reactor loop,主线程的Run Loop监听屏幕UI事件,一旦发生UI事件则执行对应的事件处理代码,还可以通过GCD等方式产生事件至主线程执行. 上图是boost对Reactor模式的描绘,Twisted的设计就是基于
-
详解Python的Django框架中Manager方法的使用
在语句Book.objects.all()中,objects是一个特殊的属性,需要通过它查询数据库. 在第5章,我们只是简要地说这是模块的manager .现在是时候深入了解managers是什么和如何使用了. 总之,模块manager是一个对象,Django模块通过它进行数据库查询. 每个Django模块至少有一个manager,你可以创建自定义manager以定制数据库访问. 下面是你创建自定义manager的两个原因: 增加额外的manager方法,和/或修manager返回的初始Quer
-
详解Python的Django框架中inclusion_tag的使用
另外一类常用的模板标签是通过渲染 其他 模板显示数据的. 比如说,Django的后台管理界面,它使用了自定义的模板标签来显示新增/编辑表单页面下部的按钮. 那些按钮看起来总是一样的,但是链接却随着所编辑的对象的不同而改变. 这就是一个使用小模板很好的例子,这些小模板就是当前对象的详细信息. 这些排序标签被称为 包含标签 .如何写包含标签最好通过举例来说明. 让我们来写一个能够产生指定作者对象的书籍清单的标签. 我们将这样利用标签: {% books_for_author author %} 结果
-
详解Python的Django框架中的通用视图
通用视图 1. 前言 回想一下,在Django中view层起到的作用是相当于controller的角色,在view中实施的 动作,一般是取得请求参数,再从model中得到数据,再通过数据创建模板,返回相应 响应对象.但在一些比较通用的功能中,比如显示对象列表,显示某对象信息,如果反复 写这么多流程的代码,也是一件浪费时间的事,在这里,Django同样给我们提供了类似的 "shortcut"捷径--通用视图. 2. 使用通用视图 使用通用视图的方法就是在urls.py这个路径配置文件中进
-
详解Python的Django框架中的模版继承
在实际应用中,你将用 Django 模板系统来创建整个 HTML 页面. 这就带来一个常见的 Web 开发问题: 在整个网站中,如何减少共用页面区域(比如站点导航)所引起的重复和冗余代码? 解决该问题的传统做法是使用 服务器端的 includes ,你可以在 HTML 页面中使用该指令将一个网页嵌入到另一个中. 事实上, Django 通过刚才讲述的 {% include %} 支持了这种方法. 但是用 Django 解决此类问题的首选方法是使用更加优雅的策略-- 模板继承 . 本质上来说,模板
-
详解Python的Django框架中的模版相关知识
HTML被直接硬编码在 Python 代码之中. def current_datetime(request): now = datetime.datetime.now() html = "<html><body>It is now %s.</body></html>" % now return HttpResponse(html) 尽管这种技术便于解释视图是如何工作的,但直接将HTML硬编码到你的视图里却并不是一个好主意. 让我们来看一下
-
详解Python的Django框架中的templates设置
TEMPLATES Django 1.8的新特性 一个列表,包含所有在Django中使用的模板引擎的设置.列表中的每一项都是一个字典,包含某个引擎的选项. 以下是一个简单的设定,告诉Django模板引擎从已安装的应用程序(installed applications)的templates子目录中读取模板: TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'APP_DIRS': True,
-
详解Python的Django框架中manage命令的使用与扩展
[简介] django-admin.py是Django的一个用于管理任务的命令行工具.本文将描述它的大概用法. 另外,在每一个Django project中都会有一个manage.py.manage.py是对django-admin.py的简单包装,它额外帮助我们做了两件事情: 它将你的project的包放到sys.path中 它将DJANGO_SETTINGS_MODULE环境变量设置为了你的project的setting.py文件的位置. 如果你是通过setup.py工具来安装Django的
随机推荐
- python实现2048小游戏
- EasyUI创建人员树的实例代码
- 批处理实现计算器功能代码(小结)
- Java数据结构之链表(动力节点之Java学院整理)
- SpringBoot初始教程之Servlet、Filter、Listener配置详解
- ie发送ajax请求返回上一次结果的解决方法
- PHP5.3新特性小结
- 解决Codeigniter不能上传rar和zip压缩包问题
- php面向对象与面向过程两种方法给图片添加文字水印
- 解决MySQL中文输出变成问号的问题
- 用ASP做一个TOP COOL的站内搜索
- C#使用listView增删操作实例
- JavaScript实现经典排序算法之选择排序
- jQuery EasyUI提交表单验证
- jquery带下拉菜单和焦点图代码分享
- Android 通过触摸动态地在屏幕上画矩形效果
- 基于java中两个对象属性的比较
- Java日期操作方法工具类实例【包含日期比较大小,相加减,判断,验证,获取年份等】
- Angular中支持SCSS的方法
- vue.js简单配置axios的方法详解