
Flask
主要用于记录Flask框架的相关学习!
jxxxh
就读于浙江师范大学
展开
-
memcached
memcached什么是memcached1.memcached之前是danga的一个项目,最早是为LiveJournal服务的,当初设计师为了加速LiveJournal访问速度而开发的,后来被很多大型项目采用。官网是www.danga.com或者是memcached.org。2.Memcached是一个高性能的分布式的内存对象缓存系统,全世界有不少公司采用这个缓存项目来构建大负载的网站,来分担数据库的压力。Memcached是通过在内存里维护一个统一的巨大的hash表,memcached能存储原创 2020-11-22 23:57:29 · 134 阅读 · 0 评论 -
Flask-Restful插件
Flask-Restful插件介绍Flask-Restful是一个专门用来写restful api的一个插件。使用他可以快速的集成restful api功能。在app的后台以及纯api的后台中,这个插件可以帮助我们节省很多时间。当然,如果在普通的网站中,这个插件就显得有些鸡肋了,因为在普通的网页开发中,是需要去渲染HTML代码的,而Flask-Restful在每个请求中都是返回json格式的数据。安装Flask-Restful需要在Flask 0.8以上的版本,在Python2.6或者原创 2020-11-22 23:50:32 · 155 阅读 · 0 评论 -
Restful API规范
Restful API规范Restful API规范restful api是用于在前端与后台进行通信的一套规范。使用这个规范可以让前后端开发变得更加轻松。以下将讨论这套规范的一些设计细节。协议采用http或者https协议。数据传输格式数据之间传输的格式应该都使用json,而不使用xml。url链接url链接中,不能有动词,只能有名词。并且对于一些名词,如果出现复数,那么应该在后面加s。HTTP请求的方法GET:从服务器上获取资源。POST:在服务器上新创建原创 2020-11-22 23:44:07 · 138 阅读 · 0 评论 -
Flask上下文
Flask上下文Flask上下文Flask项目中有两个上下文,一个是应用上下文(app),另外一个是请求上下文(request)。请求上下文request和应用上下文current_app都是一个全局变量。所有请求都共享的。Flask有特殊的机制可以保证每次请求的数据都是隔离的,即A请求所产生的数据不会影响到B请求。所以可以直接导入request对象,也不会被一些脏数据影响了,并且不需要在每个函数中使用request的时候传入request对象。这两个上下文具体的实现方式和原理可以没必要详细了解。原创 2020-11-22 23:28:24 · 95 阅读 · 0 评论 -
cookie和session
cookie和sessioncookie和session1、cookie:在网站中,http请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。cookie的出现就是为了解决这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。cookie存储的数据量有限,不同的浏原创 2020-11-22 23:22:00 · 94 阅读 · 1 评论 -
WTForms表单验证
WTForms表单验证Flask-WTFFlask-WTF是简化了WTForms操作的一个第三方库。WTForms表单的两个主要功能是验证用户提交数据的合法性以及渲染模板。当然还包括一些其他的功能:CSRF保护,文件上传等。安装Flask-WTF默认也会安装WTForms,因此使用以下命令来安装Flask-WTFpip install flask-wtf表单验证安装完Flask-WTF后。来看下第一个功能,就是用表单来做数据验证,现在有一个forms.py文件,然后在里面创建一个R原创 2020-11-22 23:11:38 · 220 阅读 · 0 评论 -
Flask-Migrate
Flask-MigrateFlask-Migrate在实际的开发环境中,经常会发生数据库修改的行为。一般我们修改数据库不会直接手动的去修改,而是去修改ORM对应的模型,然后再把模型映射到数据库中。这时候如果有一个工具能专门做这种事情,就显得非常有用了,而flask-migrate就是做这个事情的。flask-migrate是基于Alembic进行的一个封装,并集成到Flask中,而所有的迁移操作其实都是Alembic做的,他能跟踪模型的变化,并将变化映射到数据库中。使用Flask-Migra原创 2020-11-22 22:13:40 · 1097 阅读 · 0 评论 -
Flask-Script
Flask-ScriptFlask-ScriptFlask-Script的作用是可以通过命令行的形式来操作Flask。例如通过命令跑一个开发版本的服务器、设置数据库,定时任务等。要使用Flask-Script,可以通过pip install flask-script安装最新版本from flask_script import Managerfrom your_app import appmanager = Manager(app)@manager.commanddef hello():原创 2020-11-22 21:11:13 · 67 阅读 · 0 评论 -
Flask-SQLAlchemy插件
Flask-SQLAlchemy插件另外一个框架,叫做Flask-SQLAlchemy,Flask-SQLAlchemy是对SQLAlchemy进行了一个简单的封装,使得我们在flask中使用sqlalchemy更加的简单。可以通过pip install flask-sqlalchemy。数据库初始化:数据库初始化不再是通过create_enginefrom flask import Flaskfrom flask_sqlalchemy import SQLAlchemyfrom const原创 2020-11-16 17:10:17 · 114 阅读 · 0 评论 -
排序和查询高级
排序和查询高级排序1、order_by:可以指定根据这个表中的某个字段进行排序,如果在前面加了一个-,代表的是降序排序。2、在模型定义的时候指定默认排序:有些时候,不想每次在查询的时候都指定排序的方式,可以在定义模型的时候就指定排序的方式。在模型定义中,添加以下代码 __mapper_args__ = { "order_by": title }即可让文章使用标题来进行排序。3、正向排序和反向排序:默认情况是从小到大,从前到后排序的,如果想要反向排序,可以调用排序的字段原创 2020-11-16 17:05:51 · 232 阅读 · 0 评论 -
外键及其四种约束
外键及其四种约束外键在Mysql中,外键可以让表之间的关系更加紧密。而SQLAlchemy同样也支持外键。通过ForeignKey类来实现,并且可以指定表的外键约束class Article(Base): __tablename__ = 'article' id = Column(Integer,primary_key=True,autoincrement=True) title = Column(String(50),nullable=False) content原创 2020-11-16 16:58:14 · 2575 阅读 · 1 评论 -
SQLAlchemy属性常用数据类型
SQLAlchemy属性常用数据类型sqlalchemy常用数据类型Integer:整形。Float:浮点类型。Boolean:传递True/False进去。DECIMAL:定点类型。enum:枚举类型。Date:传递datetime.date()进去。DateTime:传递datetime.datetime()进去。Time:传递datetime.time()进去。String:字符类型,使用时需要指定长度,区别于Text类型。Text:文本类型。LONGTEXT:长文本类型原创 2020-11-16 16:46:19 · 605 阅读 · 0 评论 -
SQLAlchemy-ORM介绍
SQLAlchemy-ORM介绍ORM介绍随着项目越来越大,采用原生SQL的方式在代码中会出现大量的SQL语句,对项目的进展非常不利SQL语句重复利用率不高,越复杂的SQL语句条件越多,代码越长。会出现很多相近似的SQL语句很多SQL语句是在业务逻辑中拼出来的,如果有数据库需要更改,就要去修改这些逻辑,很容易漏掉某些SQL语句的修改写SQL时容易忽略web安全问题ORM: Object Relationship Mapping,对象关系映射,通过ORM我们可以通过类的方式去操作数据库原创 2020-11-16 16:40:27 · 526 阅读 · 0 评论 -
SQLAlchemy介绍和基本使用
SQLAlchemy介绍和基本使用数据库是一个网站的基础。Flask可以使用很多种数据库。比如MySQL,MongoDB,SQLite,PostgreSQL等。这里我们以MySQL为例进行讲解。而在Flask中,如果想要操作数据库,我们可以使用ORM来操作数据库,使用ORM操作数据库将变得非常简单。在进行Flask中的数据库操作之前,先要安装这些模块mysql:如果是在windows上,到官网下载。如果是ubuntu,通过命令sudo apt-get install mysql-server l原创 2020-11-16 16:32:27 · 255 阅读 · 0 评论 -
数据库的介绍
数据库的介绍传统记录数据的缺点不易保存备份困难查找不便现代化手段-文件对于数据容量较大的数据,不能够很好的满足,而且性能较差不易扩展数据库持久化存储读写速度极高保证数据的有效性对程序支持性非常好,容易扩展我们将来看到的是这个样子的实际上在网页上展示出来的是理解数据库数据行(记录)数据列(字段)数据表(数据行的集合)数据库(数据表的集合)MySQL 简介MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,后来转载 2020-11-16 16:27:11 · 112 阅读 · 0 评论 -
蓝图和子域名
蓝图和子域名1、蓝图之前我们写的url和视图函数都是处在同一个文件,如果项目比较大的话,这显然不是一个合理的结构,而蓝图可以优雅的帮我们实现这种需求。from flask import Blueprintbp = Blueprint('user',__name__,url_prefix='/user/')@bp.route('/')def index(): return "用户首页"@bp.route('profile/')def profile(): return "个原创 2020-11-12 11:41:07 · 93 阅读 · 0 评论 -
类视图
类视图之前我们接触的视图都是函数,所以一般简称视图函数。其实视图也可以基于类来实现,类视图的好处是支持继承,但是类视图不能跟函数视图一样,写完类视图还需要通过app.add_url_rule(url_rule,view_func)来进行注册。1、标准类视图标准类视图是继承自flask.views.View,并且在子类中必须实现dispatch_request方法,这个方法类似于视图函数,也要返回一个基于Response或者其子类的对象from flask.views import Viewcl原创 2020-11-12 11:34:31 · 392 阅读 · 0 评论 -
URL与视图
1、URL与视图1.1 URL与函数的映射从之前的helloworld.py文件中,我们已经看到,一个URL要与执行函数进行映射,使用的是@app.route装饰器。@app.route装饰器中,可以指定URL的规则来进行更加详细的映射,比如现在要映射一个文章详情的URL,文章详情的URL是/article/id/,id有可能为1、2、3…,那么可以通过以下方式@app.route('/article/<id>/')def article(id): return '%s ar.原创 2020-11-12 08:42:51 · 102 阅读 · 0 评论 -
项目配置
1、项目配置1.1 设置为DEBUG模式默认情况下flask不会开启DEBUG模式,开启DEBUG模式后,flask会在每次保存代码的时候自动的重新载入代码,并且如果代码有错误,会在终端进行提示开启DEBUG模式有三种方式:1、直接在应用对象上设置app.debug = Trueapp.run()2、在执行run方法的时候,传递参数进去app.run(debug=True)3、在config属性中设置app.config.update(DEBUG=True)如果一切正常,会.原创 2020-11-12 08:40:56 · 156 阅读 · 1 评论 -
Flask简介
1、Flask简介1.1 Flask简介flask是一款非常流行的Python Web框架,出生于2010年,作者是Armin Ronacher,本来这个项目只是作者在愚人节的一个玩笑,后来由于非常受欢迎,进而成为一个正式的项目。flask自2010年发布第一个版本以来,大受欢迎,深得开发者的喜爱,并且在多个公司已经得到了应用,flask能如此流行的原因,可以分为以下几点:微框架、简洁、只做他需要做的,给开发者提供了很大的扩展性。Flask和相应的插件写得很好,用起来很爽。开发效率非常.原创 2020-11-12 08:38:38 · 205 阅读 · 0 评论 -
模版案例
模版案例效果图数据准备# 电影movies = [ { 'id': '11211', 'thumbnail': 'https://img3.doubanio.com/view/movie_poster_cover/lpst/public/p2499792043.webp', 'title': u'王牌特工2:黄金圈', 'rating': u'7.3', 'comment_count': 12000,原创 2020-11-12 00:08:39 · 143 阅读 · 0 评论 -
模版继承
模版继承模板继承Flask中的模板可以继承,通过继承可以把模板中许多重复出现的元素抽取出来,放在父模板中,并且父模板通过定义block给子模板开一个口,子模板根据需要,再实现这个block,假设现在有一个base.html这个父模板<!DOCTYPE html><html lang="en"><head> <link rel="stylesheet" href="base.css" /> <title>{% block原创 2020-11-12 00:06:29 · 672 阅读 · 0 评论 -
include和set语句
include和set语句include语句include语句可以把一个模板引入到另外一个模板中,类似于把一个模板的代码copy到另外一个模板的指定位置{% include 'header.html' %} 主体内容{% include 'footer.html' %}赋值(set)语句有时候我们想在在模板中添加变量,这时候赋值语句(set)就派上用场了{% set name='juran' %}那么以后就可以使用name来代替juran这个值了,同时,也可以给原创 2020-11-12 00:03:00 · 288 阅读 · 0 评论 -
宏和import语句
宏和import语句宏模板中的宏跟python中的函数类似,可以传递参数,但是不能有返回值,可以将一些经常用到的代码片段放到宏中,然后把一些不固定的值抽取出来当成一个变量{% macro input(name, value='', type='text') %} <input type="{{ type }}" name="{{ name }}" value="{{ value }}">{% endmacro %}以上例子可以抽取出了一个input标签,指定了一些默认参原创 2020-11-12 00:00:23 · 186 阅读 · 0 评论 -
控制语句
控制语句所有的控制语句都是放在{% … %}中,并且有一个语句{% endxxx %}来进行结束,Jinja中常用的控制语句有if/for…in…if:if语句和python中的类似,可以使用>,<,<=,>=,==,!=来进行判断,也可以通过and,or,not,()来进行逻辑合并操作{% if kenny.sick %} Kenny is sick.{% elif kenny.dead %} You killed Kenny! You bastard!!原创 2020-11-11 23:48:18 · 268 阅读 · 0 评论 -
Jinja2模版过滤器
Jinja2模版过滤器过滤器是通过管道符号(|)进行使用的,例如:{{ name|length }},将返回name的长度。过滤器相当于是一个函数,把当前的变量传入到过滤器中,然后过滤器根据自己的功能,再返回相应的值,之后再将结果渲染到页面中。Jinja2中内置了许多过滤器,在这里可以看到所有的过滤器abs(value):返回一个数值的绝对值。default(value,default_value,boolean=false):如果当前变量没有值,则会使用参数中的值来代替。name|default原创 2020-11-11 23:43:08 · 149 阅读 · 0 评论 -
模板简介
模板简介1、模板模板是一个web开发必备的模块。因为我们在渲染一个网页的时候,并不是只渲染一个纯文本字符串,而是需要渲染一个有富文本标签的页面。这时候我们就需要使用模板了。在Flask中,配套的模板是Jinja2,Jinja2的作者也是Flask的作者。这个模板非常的强大,并且执行效率高。以下对Jinja2做一个简单介绍!2、Flask渲染Jinja模板要渲染一个模板,通过render_template方法即可from flask import Flask,render_template原创 2020-11-11 23:37:01 · 205 阅读 · 0 评论 -
Flask视图和URL
Flask视图和URL1、虚拟环境1.1 为什么需要虚拟环境到目前位置,我们所有的第三方包安装都是直接通过pip install xx的方式进行安装的,这样安装会将那个包安装到你的系统级的Python环境中。但是这样有一个问题,就是如果你现在用Django 1.10.x写了个网站,然后你的领导跟你说,之前有一个旧项目是用Django 0.9开发的,让你来维护,但是Django 1.10不再兼容Django 0.9的一些语法了。这时候就会碰到一个问题,我如何在我的电脑中同时拥有Django 1.1原创 2020-11-08 15:39:58 · 212 阅读 · 0 评论