本篇导航:

一. 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、安装

  1. pip3 install flask

2、Flask依赖一个实现wsgi协议的模块:werkzeug

  1. from werkzeug.wrappers import Request, Response
  2.  
  3. @Request.application
  4. def hello(request):
  5. return Response('Hello World!')
  6.  
  7. if __name__ == '__main__':
  8. from werkzeug.serving import run_simple
  9. run_simple('localhost', 4000, hello)

3、简单使用

  1. from flask import Flask
  2. app = Flask(__name__)
  3.  
  4. @app.route('/')
  5. def hello_world():
  6. return 'Hello World!'
  7.  
  8. if __name__ == '__main__':
  9. app.run()

4、练习

  1. from flask import Flask,render_template,request,redirect,session
  2. app = Flask(__name__)
  3. app.secret_key = "sdsfdsgdfgdfgfh"
  4.  
  5. def wrapper(func):
  6. def inner(*args,**kwargs):
  7. if not session.get("user_info"):
  8. return redirect("/login")
  9. ret = func(*args,**kwargs)
  10. return ret
  11. return inner
  12.  
  13. @app.route("/login",methods=["GET","POST"])
  14. def login():
  15. if request.method=="GET":
  16. return render_template("login.html")
  17. else:
  18. # print(request.values) #这个里面什么都有,相当于body
  19. username = request.form.get("username")
  20. password = request.form.get("password")
  21. if username=="haiyan" and password=="":
  22. session["user_info"] = username
  23. # session.pop("user_info") #删除session
  24. return redirect("/index")
  25. else:
  26. # return render_template("login.html",**{"msg":"用户名或密码错误"})
  27. return render_template("login.html",msg="用户名或者密码错误")
  28.  
  29. @app.route("/index",methods=["GET","POST"])
  30. @wrapper
  31. def index():
  32. # if not session.get("user_info"):
  33. # return redirect("/login")
  34. return render_template("index.html")
  35.  
  36. if __name__ == '__main__':
  37. app.run(debug=True)

保存session的数据存到了浏览器上,
  - 优点:减轻了服务端的压力
  - 缺点:不安全


三、排错

1、当你点击提交出现这样的错

解决方案

  1. @app.route("/login",methods=["GET","POST"])

 2、设置session的时候

解决方法:设置秘钥

  1. app.secret_key = "sdsfdsgdfgdfgfh"

附加:


四、小结

1、flask依赖wsgi,实现wsgi的模块:wsgiref,werkzeug,uwsgi

2、实例化Flask对象,里面是有参数的

  1. app = Flask(__name__,template_folder='templates',static_url_path='/xxxxxx')

3、两种添加路由的方式

  1. 方式一:
  2. @app.route('/xxxx') # @decorator
  3. def index():
  4. return "Index"
  5. 方式二:
  6. def index():
  7. return "Index"
  8. app.add_url_rule('/xxx', "n1", index) #n1是别名

4、添加路由关系的本质

  将url和视图函数封装成一个Rule对象)添加到Flask的url_map字段中

5、Flask中装饰器应用

  1. from flask import Flask,render_template,request,redirect,session
  2. app = Flask(__name__)
  3. app.secret_key = "sdsfdsgdfgdfgfh"
  4.  
  5. def wrapper(func):
  6. def inner(*args,**kwargs):
  7. if not session.get("user_info"):
  8. return redirect("/login")
  9. ret = func(*args,**kwargs)
  10. return ret
  11. return inner
  12.  
  13. @app.route("/login",methods=["GET","POST"])
  14. def login():
  15. if request.method=="GET":
  16. return render_template("login.html")
  17. else:
  18. # print(request.values) #这个里面什么都有,相当于body
  19. username = request.form.get("username")
  20. password = request.form.get("password")
  21. if username=="haiyan" and password=="":
  22. session["user_info"] = username
  23. # session.pop("user_info") #删除session
  24. return redirect("/index")
  25. else:
  26. # return render_template("login.html",**{"msg":"用户名或密码错误"})
  27. return render_template("login.html",msg="用户名或者密码错误")
  28.  
  29. @app.route("/index",methods=["GET","POST"])
  30. @wrapper
  31. def index():
  32. # if not session.get("user_info"):
  33. # return redirect("/login")
  34. return render_template("index.html")
  35.  
  36. if __name__ == '__main__':
  37. app.run(debug=True)

6、请求响应相关

  1. - request
  2. - request.form #POST请求
  3. - request.args #GET请求 字典形式的
  4. - request.querystring #GET请求,bytes形式的
  5. - response
  6. - return render_tempalte()
  7. - return redirect()
  8. - return ""
  9. v = make_response(返回值) #吧返回的值包在了这个函数里面
  10. - session
  11. - 存在浏览器上,并且是加密的
  12. - 依赖于:secret_key

 7、Flask配置文件

  1. flask中的配置文件是一个flask.config.Config对象(继承字典),默认配置为:
  2. {
  3. 'DEBUG': get_debug_flag(default=False), 是否开启Debug模式
  4. 'TESTING': False, 是否开启测试模式
  5. 'PROPAGATE_EXCEPTIONS': None,
  6. 'PRESERVE_CONTEXT_ON_EXCEPTION': None,
  7. 'SECRET_KEY': None,
  8. 'PERMANENT_SESSION_LIFETIME': timedelta(days=31),
  9. 'USE_X_SENDFILE': False,
  10. 'LOGGER_NAME': None,
  11. 'LOGGER_HANDLER_POLICY': 'always',
  12. 'SERVER_NAME': None,
  13. 'APPLICATION_ROOT': None,
  14. 'SESSION_COOKIE_NAME': 'session',
  15. 'SESSION_COOKIE_DOMAIN': None,
  16. 'SESSION_COOKIE_PATH': None,
  17. 'SESSION_COOKIE_HTTPONLY': True,
  18. 'SESSION_COOKIE_SECURE': False,
  19. 'SESSION_REFRESH_EACH_REQUEST': True,
  20. 'MAX_CONTENT_LENGTH': None,
  21. 'SEND_FILE_MAX_AGE_DEFAULT': timedelta(hours=12),
  22. 'TRAP_BAD_REQUEST_ERRORS': False,
  23. 'TRAP_HTTP_EXCEPTIONS': False,
  24. 'EXPLAIN_TEMPLATE_LOADING': False,
  25. 'PREFERRED_URL_SCHEME': 'http',
  26. 'JSON_AS_ASCII': True,
  27. 'JSON_SORT_KEYS': True,
  28. 'JSONIFY_PRETTYPRINT_REGULAR': True,
  29. 'JSONIFY_MIMETYPE': 'application/json',
  30. 'TEMPLATES_AUTO_RELOAD': None,
  31. }
  32.  
  33. 方式一:
  34. app.config['DEBUG'] = True
  35.  
  36. PS 由于Config对象本质上是字典,所以还可以使用app.config.update(...)
  37.  
  38. 方式二:
  39. app.config.from_pyfile("python文件名称")
  40. 如:
  41. settings.py
  42. DEBUG = True
  43.  
  44. app.config.from_pyfile("settings.py")
  45.  
  46. app.config.from_envvar("环境变量名称")
  47. 环境变量的值为python文件名称名称,内部调用from_pyfile方法
  48.  
  49. app.config.from_json("json文件名称")
  50. JSON文件名称,必须是json格式,因为内部会执行json.loads
  51.  
  52. app.config.from_mapping({'DEBUG':True})
  53. 字典格式
  54.  
  55. app.config.from_object("python类或类的路径")
  56.  
  57. app.config.from_object('pro_flask.settings.TestingConfig')
  58.  
  59. settings.py
  60.  
  61. class Config(object):
  62. DEBUG = False
  63. TESTING = False
  64. DATABASE_URI = 'sqlite://:memory:'
  65.  
  66. class ProductionConfig(Config):
  67. DATABASE_URI = 'mysql://user@localhost/foo'
  68.  
  69. class DevelopmentConfig(Config):
  70. DEBUG = True
  71.  
  72. class TestingConfig(Config):
  73. TESTING = True
  74.  
  75. PS: sys.path中已经存在路径开始写
  76.  
  77. PS: settings.py文件默认路径要放在程序root_path目录,如果instance_relative_configTrue,则就是instance_path目录
  78.  
  79. 配置文件

flask之入门的更多相关文章

  1. Flask快速入门

    flask快速入门 1.1.三种框架比较 Django: 重武器,内部包含了非常多组件:ORM.Form.ModelForm.缓存.Session.中间件.信号等 Flask:短小精悍,内部没有太多组 ...

  2. Flask从入门到放弃1:路由app.route()

    Flask从入门到放弃1: Flask中的路由app.route(): 参考来源:http://python.jobbole.com/80956/ https://www.raspberrypi.or ...

  3. Flask 框架入门

    Flask Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 . 安装 Flask 依赖两个外部库, We ...

  4. Flask服务入门案例

    安装 pip install Flask 入门例子 from flask import Flask app = Flask(__name__) @app.route('/hello.world') d ...

  5. 【转】Flask快速入门

    迫不及待要开始了吗?本页提供了一个很好的 Flask 介绍,并假定你已经安装好了 Flask.如果没有,请跳转到 安装 章节. 一个最小的应用 一个最小的 Flask 应用看起来会是这样: from ...

  6. FLASK简单入门

    假定你已经安装好了 Flask.如果没有,请跳转到 安装 章节. 一个最小的应用¶ 一个最小的 Flask 应用看起来会是这样: from flask import Flask app = Flask ...

  7. 【先验知识归纳】Flask快速入门

    本文参考:快速入门 - Flask 0.10.1 文档 路由 Flask使用route修饰器来关联URL与程序函数: @app.route('/') def hello_world(): return ...

  8. Flask从入门到做出一个博客的大型教程(一)

    本项目全部在虚拟环境中运行,因此请参照前面的文章,链接为https://blog.csdn.net/u014793102/article/details/80302975 建立虚拟环境后,再接着完成本 ...

  9. Flask框架入门

    Flask-基本入门 简介 flask被称为微型框架,只提供了一个强健的核心,其他功能全部通过扩展库来实现:也就是说可以根据项目需要量身打造.他适合入门学习以及高手研究. 组成:WSGI.模板引擎(J ...

  10. Flask 快速入门

    最简单的flask程序 from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return ...

随机推荐

  1. VisualSVN服务器的本地搭建和使用

    Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网站上了,下载地址: http:// ...

  2. Visual Studio图形调试器详细使用教程(基于DirectX11)

    前言 对于DirectX程序开发者来说,学会使用Visual Studio Graphics Debugger(图形调试器)可以帮助你全面了解渲染管线绑定的资源和运行状态,从而确认问题所在.现在就以我 ...

  3. word中中文保持正体,英文用斜体的方法.

    有时候,大段的文字中夹杂着英文字母,英文需要斜体,如果一个接一个选中再斜体,费时费力,那么怎样快速实现文斜体中文不斜体呢? 工具/原料 word软件 方法/步骤 选中要修改的段落,替换-查找内容-特殊 ...

  4. PhpStorm+xdebug调试——更新

    之前写过一篇<PhpStorm+xdebug+postman调试>,但是经过后来一段时间的使用,发现有些累赘.这里介绍一种比较简单方便的操作. 在上一篇文章中有一段“ 7.设置Server ...

  5. C#获取应用程序路径

    string s = Environment.CurrentDirectory; //需添加Forms.DLL s = System.Windows.Forms.Application.Startup ...

  6. 批量检测服务器是否能telnet连通

    # coding: UTF-8import osimport sysimport jsonimport platformfrom _utils.patrol2 import data_format,r ...

  7. 【转载】MySQL5.7 添加用户、删除用户与授权

    mysql -uroot -proot MySQL5.7 mysql.user表没有password字段改 authentication_string: 一. 创建用户: 命令:CREATE USER ...

  8. HTML常用基础标签

    HTML常用基础标签 带有语义的标签 <em> </em> 强调 <strong> </strong> 比em强调级别高 <abbr> &l ...

  9. MySql新增表的字段,删除表字段

    1增加两个字段: create table id_name(id int,name varchar(20));//创建原始数据表 alter table id_name add age int,add ...

  10. oc调用swift的打包.a / framework 不成功?!

     https://www.jianshu.com/p/734341f7c242   虽说是Swift和OC混编SDK,但目前只支持项目中使用了Swift调用OC的工程,暂不支持OC调用Swift的工程 ...