flask之入门
本篇导航:
一. Flask介绍
Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器。
“微”(micro) 并不表示你需要把整个 Web 应用塞进单个 Python 文件(虽然确实可以 ),也不意味着 Flask 在功能上有所欠缺。微框架中的“微”意味着 Flask 旨在保持核心简单而易于扩展。Flask 不会替你做出太多决策——比如使用何种数据库。而那些 Flask 所选择的——比如使用何种模板引擎——则很容易替换。除此之外的一切都由可由你掌握。如此,Flask 可以与您珠联璧合。
默认情况下,Flask 不包含数据库抽象层、表单验证,或是其它任何已有多种库可以胜任的功能。然而,Flask 支持用扩展来给应用添加这些功能,如同是 Flask 本身实现的一样。众多的扩展提供了数据库集成、表单验证、上传处理、各种各样的开放认证技术等功能。Flask 也许是“微小”的,但它已准备好在需求繁杂的生产环境中投入使用。
-和Django比较
django:无socket,依赖第三方模块wsgi,中间件,路由系统(CBV,FBV),视图函数,ORM。cookie,session,Admin,Form,缓存,信号,序列化。。
Flask:无socket,中间件(扩展),路由系统,视图(CBV)、第三方模块(依赖jinja2),cookie,session弱爆了
二、简单使用
1、安装
- pip3 install flask
2、Flask依赖一个实现wsgi协议的模块:werkzeug
- from werkzeug.wrappers import Request, Response
- @Request.application
- def hello(request):
- return Response('Hello World!')
- if __name__ == '__main__':
- from werkzeug.serving import run_simple
- run_simple('localhost', 4000, hello)
3、简单使用
- from flask import Flask
- app = Flask(__name__)
- @app.route('/')
- def hello_world():
- return 'Hello World!'
- if __name__ == '__main__':
- app.run()
4、练习
- from flask import Flask,render_template,request,redirect,session
- app = Flask(__name__)
- app.secret_key = "sdsfdsgdfgdfgfh"
- def wrapper(func):
- def inner(*args,**kwargs):
- if not session.get("user_info"):
- return redirect("/login")
- ret = func(*args,**kwargs)
- return ret
- return inner
- @app.route("/login",methods=["GET","POST"])
- def login():
- if request.method=="GET":
- return render_template("login.html")
- else:
- # print(request.values) #这个里面什么都有,相当于body
- username = request.form.get("username")
- password = request.form.get("password")
- if username=="haiyan" and password=="":
- session["user_info"] = username
- # session.pop("user_info") #删除session
- return redirect("/index")
- else:
- # return render_template("login.html",**{"msg":"用户名或密码错误"})
- return render_template("login.html",msg="用户名或者密码错误")
- @app.route("/index",methods=["GET","POST"])
- @wrapper
- def index():
- # if not session.get("user_info"):
- # return redirect("/login")
- return render_template("index.html")
- if __name__ == '__main__':
- app.run(debug=True)
保存session的数据存到了浏览器上,
- 优点:减轻了服务端的压力
- 缺点:不安全
三、排错
1、当你点击提交出现这样的错
解决方案
- @app.route("/login",methods=["GET","POST"])
2、设置session的时候
解决方法:设置秘钥
- app.secret_key = "sdsfdsgdfgdfgfh"
附加:
四、小结
1、flask依赖wsgi,实现wsgi的模块:wsgiref,werkzeug,uwsgi
2、实例化Flask对象,里面是有参数的
- app = Flask(__name__,template_folder='templates',static_url_path='/xxxxxx')
3、两种添加路由的方式
- 方式一:
- @app.route('/xxxx') # @decorator
- def index():
- return "Index"
- 方式二:
- def index():
- return "Index"
- app.add_url_rule('/xxx', "n1", index) #n1是别名
4、添加路由关系的本质
将url和视图函数封装成一个Rule对象)添加到Flask的url_map字段中
5、Flask中装饰器应用
- from flask import Flask,render_template,request,redirect,session
- app = Flask(__name__)
- app.secret_key = "sdsfdsgdfgdfgfh"
- def wrapper(func):
- def inner(*args,**kwargs):
- if not session.get("user_info"):
- return redirect("/login")
- ret = func(*args,**kwargs)
- return ret
- return inner
- @app.route("/login",methods=["GET","POST"])
- def login():
- if request.method=="GET":
- return render_template("login.html")
- else:
- # print(request.values) #这个里面什么都有,相当于body
- username = request.form.get("username")
- password = request.form.get("password")
- if username=="haiyan" and password=="":
- session["user_info"] = username
- # session.pop("user_info") #删除session
- return redirect("/index")
- else:
- # return render_template("login.html",**{"msg":"用户名或密码错误"})
- return render_template("login.html",msg="用户名或者密码错误")
- @app.route("/index",methods=["GET","POST"])
- @wrapper
- def index():
- # if not session.get("user_info"):
- # return redirect("/login")
- return render_template("index.html")
- if __name__ == '__main__':
- app.run(debug=True)
6、请求响应相关
- - request
- - request.form #POST请求
- - request.args #GET请求 字典形式的
- - request.querystring #GET请求,bytes形式的
- - response
- - return render_tempalte()
- - return redirect()
- - return ""
- v = make_response(返回值) #吧返回的值包在了这个函数里面
- - session
- - 存在浏览器上,并且是加密的
- - 依赖于:secret_key
7、Flask配置文件
- 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['DEBUG'] = True
- PS: 由于Config对象本质上是字典,所以还可以使用app.config.update(...)
- 方式二:
- 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.loads
- app.config.from_mapping({'DEBUG':True})
- 字典格式
- app.config.from_object("python类或类的路径")
- app.config.from_object('pro_flask.settings.TestingConfig')
- settings.py
- class Config(object):
- DEBUG = False
- TESTING = False
- DATABASE_URI = 'sqlite://:memory:'
- class ProductionConfig(Config):
- DATABASE_URI = 'mysql://user@localhost/foo'
- class DevelopmentConfig(Config):
- DEBUG = True
- class TestingConfig(Config):
- TESTING = True
- PS: 从sys.path中已经存在路径开始写
- PS: settings.py文件默认路径要放在程序root_path目录,如果instance_relative_config为True,则就是instance_path目录
- 配置文件
flask之入门的更多相关文章
- Flask快速入门
flask快速入门 1.1.三种框架比较 Django: 重武器,内部包含了非常多组件:ORM.Form.ModelForm.缓存.Session.中间件.信号等 Flask:短小精悍,内部没有太多组 ...
- Flask从入门到放弃1:路由app.route()
Flask从入门到放弃1: Flask中的路由app.route(): 参考来源:http://python.jobbole.com/80956/ https://www.raspberrypi.or ...
- Flask 框架入门
Flask Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 . 安装 Flask 依赖两个外部库, We ...
- Flask服务入门案例
安装 pip install Flask 入门例子 from flask import Flask app = Flask(__name__) @app.route('/hello.world') d ...
- 【转】Flask快速入门
迫不及待要开始了吗?本页提供了一个很好的 Flask 介绍,并假定你已经安装好了 Flask.如果没有,请跳转到 安装 章节. 一个最小的应用 一个最小的 Flask 应用看起来会是这样: from ...
- FLASK简单入门
假定你已经安装好了 Flask.如果没有,请跳转到 安装 章节. 一个最小的应用¶ 一个最小的 Flask 应用看起来会是这样: from flask import Flask app = Flask ...
- 【先验知识归纳】Flask快速入门
本文参考:快速入门 - Flask 0.10.1 文档 路由 Flask使用route修饰器来关联URL与程序函数: @app.route('/') def hello_world(): return ...
- Flask从入门到做出一个博客的大型教程(一)
本项目全部在虚拟环境中运行,因此请参照前面的文章,链接为https://blog.csdn.net/u014793102/article/details/80302975 建立虚拟环境后,再接着完成本 ...
- Flask框架入门
Flask-基本入门 简介 flask被称为微型框架,只提供了一个强健的核心,其他功能全部通过扩展库来实现:也就是说可以根据项目需要量身打造.他适合入门学习以及高手研究. 组成:WSGI.模板引擎(J ...
- Flask 快速入门
最简单的flask程序 from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return ...
随机推荐
- VisualSVN服务器的本地搭建和使用
Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网站上了,下载地址: http:// ...
- Visual Studio图形调试器详细使用教程(基于DirectX11)
前言 对于DirectX程序开发者来说,学会使用Visual Studio Graphics Debugger(图形调试器)可以帮助你全面了解渲染管线绑定的资源和运行状态,从而确认问题所在.现在就以我 ...
- word中中文保持正体,英文用斜体的方法.
有时候,大段的文字中夹杂着英文字母,英文需要斜体,如果一个接一个选中再斜体,费时费力,那么怎样快速实现文斜体中文不斜体呢? 工具/原料 word软件 方法/步骤 选中要修改的段落,替换-查找内容-特殊 ...
- PhpStorm+xdebug调试——更新
之前写过一篇<PhpStorm+xdebug+postman调试>,但是经过后来一段时间的使用,发现有些累赘.这里介绍一种比较简单方便的操作. 在上一篇文章中有一段“ 7.设置Server ...
- C#获取应用程序路径
string s = Environment.CurrentDirectory; //需添加Forms.DLL s = System.Windows.Forms.Application.Startup ...
- 批量检测服务器是否能telnet连通
# coding: UTF-8import osimport sysimport jsonimport platformfrom _utils.patrol2 import data_format,r ...
- 【转载】MySQL5.7 添加用户、删除用户与授权
mysql -uroot -proot MySQL5.7 mysql.user表没有password字段改 authentication_string: 一. 创建用户: 命令:CREATE USER ...
- HTML常用基础标签
HTML常用基础标签 带有语义的标签 <em> </em> 强调 <strong> </strong> 比em强调级别高 <abbr> &l ...
- MySql新增表的字段,删除表字段
1增加两个字段: create table id_name(id int,name varchar(20));//创建原始数据表 alter table id_name add age int,add ...
- oc调用swift的打包.a / framework 不成功?!
https://www.jianshu.com/p/734341f7c242 虽说是Swift和OC混编SDK,但目前只支持项目中使用了Swift调用OC的工程,暂不支持OC调用Swift的工程 ...