Python 框架之Flask初步了解

前言

​ 在了解python web 框架之前,我们需要先了解框架实现的基本原理。首先,需要了解WSGI(Web Server Gateway Interface),借助WSGI我们就能实现用Python专注于生成HTML文档,不用接触到TCP连接、HTTP原始请求和响应格式,所以,需要一个统一的接口,让我们专心用Python编写Web业务。

​ WSGI将Web服务分成两个部分:服务器和应用程序。WGSI服务器只负责与网络相关的两件事:接收浏览器的HTTP请求、向浏览器发送HTTP应答;而对HTTP请求的具体处理逻辑,则通过调用WSGI应用程序进行。

Flask

  • Flask与别的框架(尤其是采用其他编程语言的框架)的不同之处在于:它没有绑定诸如数据库查询或者表单处理等功能库,以及它们所组成的整个生态系统。它倾向于对这些功能的实现方式不做任何限定。

  • 实验环境:win10、pycharm、anaconda2.4

  • 安装:

    由于安装了anaconda全家桶,所以已经自动包含了flask的框架。需要安装的话可以通过pip命令进行安装。

  • 试运行hello world

    在pycharm新建一个项目,配置相关python解释器,然后创建hello.py文件,写入如下代码:

    from flask import Flaskapp = Flask(__name__)@app.route('/')
    def hello_world():return 'Hello world!'
    @app.route('/test')
    def test():return 'This is a test'if __name__ == '__main__':app.run()

    点击run的按钮,即可在浏览器输入127.0.0.1:5000,显示如下:

  • 关于路由分发

    通过@app.route(‘xxx’)形式分配路由,如上代码,“/”表示访问站点根目录,即hello_world()函数,“/test”表示访问test()函数,通过这种新式我们可以很方便的给路由进行分组。

  • 关于变量规则

    如果希望获取/hello/1这样的路径参数,就需要使用变量规则。语法是/path/<converter:varname>。在变量前还可以使用可选的转换器,有以下几种转换器:

转换器 作用
string 默认选项,接受除了斜杠之外的字符串
int 接受整数
float 接受浮点数
path 和string类似,不过可以接受带斜杠的字符串
any 匹配任何一种转换器
uuid 接受UUID字符串

  • 构建url

    使用函数 url_for() 来针对一个特定的函数构建一个 URL。它能够接受函数名作为第一参数,以及一些关键字参数, 每一个关键字参数对应于 URL 规则的变量部分。未知变量部分被插入到 URL 中作为查询参数。

    如:

    from flask import Flask, url_for
    app = Flask(__name__)
    @app.route('/')
    def index():return 'Home page'@app.route('/login')
    def login():return 'Get login'@app.route('/user/<username>')
    def profile(username):return 'show user %s' % usernamewith app.test_request_context():print url_for('index')print url_for('login')print url_for('profile', username='John Doe')if __name__ == '__main__':app.run()
  • HTTP方法

    首先需要引入request的包,route装饰器中会有相应的methods参数

    from flask import request@app.route('/login', methods=['GET', 'POST'])
    def login():if request.method == 'POST':do_the_login()else:show_the_login_form()
  • 静态文件的引入

    静态文件如css、js资源的引入需要在项目中创建static文件夹,用/static来引用访问。也可以给资源定义url

    url_for('static', filename='common.css')
  • 模板渲染

    引入render_template,模板文件需要放在templates 文件夹中,通过render_template()渲染模板。

    from flask import render_template@app.route('/hello/')
    @app.route('/hello/<name>')
    def hello(name=“”):return render_template('hello.html', name=name)
    • 模板继承

    • 设置可重写区域:

      
      # 以 {% block xx %} 开头# 以 {% endblock %} 结束
      
    • 继承:

      
      # 以 {% extends "base.html" %} 可继承base.html# 以 {{ super() }} 可获取父类内容
      
  • request 对象

    request 是一个全局对象。可通过request对象获取页面的传输数据。当前请求的方法可以用method属性来访问。你可以用 form 属性来访问表单数据,如:

    @app.route('/login', methods=['POST', 'GET'])
    def login():error = Noneif request.method == 'POST':if valid_login(request.form['username'],request.form['password']):return log_the_user_in(request.form['username'])else:error = 'Invalid username/password'return render_template('login.html', error=error)
  • cookies

    from flask import request# cookies 的读取# 使用 cookies.get(key) 代替 cookies[key] 避免# 得到 KeyError 如果cookie不存在@app.route('/get')
    def index():username = request.cookies.get('username')# cookies 的发送@app.route('/set')
    def index1():resp = make_response(render_template(...))resp.set_cookie('username', 'the username')return resp
    
  • 重定向和错误

    重定向采用redirect()函数,错误中断采用abort()函数并指定一个错误代码(如404),通过 errorhandler()装饰器制定自定义错误页面。如:

    from flask import abort, redirect, url_for@app.route('/')
    def index():return redirect(url_for('login'))@app.route('/login')
    def login():abort(404)this_is_never_executed()

    错误界面:

    from flask import render_template@app.errorhandler(404)
    def page_not_found(error):return render_template('page_not_found.html'), 404
  • session 会话

    from flask import Flask, session, redirect, url_for, escape, requestapp = Flask(__name__)@app.route('/')
    def index():if 'username' in session:return 'Logged in as %s' % escape(session['username'])return 'You are not logged in'@app.route('/login', methods=['GET', 'POST'])
    def login():if request.method == 'POST':session['username'] = request.form['username']return redirect(url_for('index'))return '''<form action="" method="post"><p><input type=text name=username><p><input type=submit value=Login></form>'''@app.route('/logout')
    def logout():# remove the username from the session if it's theresession.pop('username', None)return redirect(url_for('index'))# set the secret key.  keep this really secret:app.secret_key = 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT'
    • 生成随机密钥:

    附上一些有用的说明,便于理解: urandom

    import os
    os.urandom(24)
  • 日志

    flask提供Logger,Logger是一个标准的Python Logger,所以我们可以向标准Logger那样配置它,详情查阅官方文档 logging documentation。

    app.logger.debug('A value for debugging')
    app.logger.warning('A warning occurred (%d apples)', 42)
    app.logger.error('An error occurred')

Python 框架之Flask初步了解相关推荐

  1. Python框架之flask

    Python框架之flak 1.目标 2.Flask初识 3.工程搭建 4.参数说明 5.路由与蓝图 6.处理请求 7. 处理响应 8.Cookie和Session 9.异常处理 10.请求钩子 11 ...

  2. python框架专栏-Flask框架篇①-基本介绍和安装

    (1)Flask简介. Flask诞生于2010年,是Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架. Flask 本身相当于一个内 ...

  3. python框架之Flask基础篇(一)

    一.第一个hello world程序 # coding=utf-8 from flask import Flaskapp = Flask(__name__)@app.route('/') def he ...

  4. python3和php7哪个好_性能是Flask的3倍!比PHP7还快!这个Python框架你值得拥有!

    天下武功,唯快不破.在软件开发中更是如此,"快"能从多方面提升用户体验.谈到Python,它似乎天生就和速度无关,你可能很熟悉Django.Flask这些框架,虽然开发效率的确不错 ...

  5. python 框架好学吗-python的flask框架难学吗

    Flask框架难学吗?它和Django哪个更容易一些,这可能是学Python web开发的同学经常问的问题,下面来说一下flask框架. Flask是python的web框架,最大的特征是轻便,让开发 ...

  6. python后端框架flask_Vue+Flask轻量级前端、后端框架,如何完美同步开发

    导言我们的Vue2.0应用:简读-微信公众号RSS,即将进入后端开发. Vue+Flask作为轻量级前端.后端框架,非常适合组合起来快速开发.一个是js,一个是Python. Bonus: 可以完美实 ...

  7. Python框架Flask系列教程(1)——基础-黄勇-专题视频课程

    Python框架Flask系列教程(1)--基础-4431人已学习 课程介绍         从初级讲解Flask开发网站.涉及到的知识点包括:URL和视图.Jinja2模版.SQLAlchemy数据 ...

  8. Python 什么是flask框架?快速入门

    一.Python flask框架 前言 1.Python 面向对象的高级编程语言,以其语法简单.免费开源.免编译扩展性高,同时也可以嵌入到C/C++程序和丰富的第三方库,Python运用到大数据分析. ...

  9. 师傅带徒弟学:Python Web之Flask框架-关东升-专题视频课程

    师傅带徒弟学:Python Web之Flask框架-317人已学习 课程介绍         Python Web是Python语言一个重要的应用方面,Python Web有很多,其中Flask和Dj ...

最新文章

  1. Qt Creator建立和运行
  2. 3583. 整数分组
  3. php 比较字符串或文章的相似度
  4. Facebook工程师之死,一个走钢丝的互联网中年男人
  5. 计算机专业答辩开场白,毕业答辩开场白三分钟
  6. ArcGIS空间数据的拓扑处理
  7. Opencv实现身份证OCR识别
  8. 通过单片机的PWM控制SG90舵机运动
  9. SolidWorks二次开发经验总结
  10. Java如何实现网页截图?
  11. matlab 矩阵列运算,MATLAB矩阵及其运算
  12. 修复鹏城开发者云硬盘扩容报错 fdisk: cannot write disk label: Invalid argument
  13. 零基础新手如何学习SEO
  14. 修改elementUI中面包屑文字颜色
  15. 分享三个前端学习方法和十项前端面试笔记:为想去的公司努力一把
  16. 交换安全----局域网安全简介
  17. 小试mini210sGPIO驱动Led灯
  18. 做人做事,必须要搞清楚的9个顺序
  19. 【GlobalMapper精品教程】050:点线面缓冲区分析案例
  20. 客户成功的「本手、俗手、妙手」

热门文章

  1. python中的字体英文名_对python opencv 添加文字 cv2.putText 的各参数介绍
  2. 485通信原理_上位机开发之单片机通信实践
  3. php array 如何访问,php – 如何访问$array [@key]值
  4. python全文检索引擎_Python中使用haystack实现django全文检索搜索引擎功能
  5. oracle 关闭如何启动,ORACLE启动和关闭实例
  6. mysql zero fill_mysql zerofill 的使用
  7. php 制造异常,php 异常
  8. 值得关注的医疗 AI 公司(待续)
  9. python安装redis库
  10. struts2+extjs文件上传完整实现(攻克了上传中的各种问题)