【Flask】FlaskWeb开发上手点滴(01)-入门

简介: 【Flask】FlaskWeb开发上手点滴(01)-入门


  • python版本:3.5
  • flask版本:0.12
  • jinja2:2.94
  • werkzeug:0.11.15

IDE使用pyCharm。

1.1、首例

首先从flask初始化的一个例子说起。

打开pyCharm新建一个Flask的项目之后,会初始化一个Flask的程序目录(假设创建一个名为flaskblog的项目)。首先来看flaskblog.py这个文件里的代码:

(包含注释)

#flaskblpg.py
#1、初始化:创建一个程序实例
from flask import Flask
app = Flask(__name__)
#flask用name这个参数决定程序的根目录,以便稍后能够找到相对于程序根目录的资源文件位置。
#2、路由和视图函数:客户端把请求发送给web服务器,web服务器再把请求发送给flask程序实例。程序实例需要知道对每个URL请求运行哪些代码
#所以保存了一个URL到Python函数的映射关系。处理URL和函数之间的关系称为路由。
# @app.route('/')flask是使用程序实例提供的app.route修饰器,把修饰的函数注册为路由。
@app.route('/user/<name>')#尖括号中得内容就是动态部分,任何能匹配静态部分的URL都会映射到这个路由上。
# flask支持在路由中使用int(如:@app.route('/user/<int:id>'))\float\path类型.path类型也是字符串,但不把斜线视作分隔符,而将其当做动态片段的一部分。
def hello_world(name):
# 视图函数,返回的响应可以是包含HTML的简单字符串,也可以是复杂的表单
    return '<h1>Hello,%s!</h1>' %name
#3、启动服务器:程序实例用run方法启动flask集成的开发web服务器。服务器启动后会进入轮询,等待并处理请求。轮询会一直运行,直到程序
#停止,比如按Ctrl-C键。
if __name__ == '__main__':
    app.run(debug=True)
#启用调式模式,ps:flask提供的web服务器不适合在生产环境中使用。

请详细阅读注释,然后在pyCharm中选中flaskblog.py运行(Run),在浏览器中测试。在浏览器地址栏中输入http://127.0.0.1:5000/user/imagineXie进行测试。

1.2程序与请求上下文

请求对象封装了客户端发送的HTTP请求。在多线程服务器中,多个线程同时处理不同客户端发送的不同请求时,每个线程看到的request对象必然不同。Falsk使用上下文让特定的变量在一个线程中全局可访问,与此同时却不会干扰其他线程。

Flask两种上下文:

(1)程序上下文

  • current_app:当前激活程序的程序实例
  • g:处理请求时用作临时存储的对象。每次请求都会重设这个变量

(2)请求上下文

  • request:请求对象,封装了客户端发出的HTTP请求中得内容
  • session:用户会话,用于存储请求之间需要“记住”的值的词典

在使用这些变量时,我们需要先激活(push())程序(app_context())或请求上下文,否则会报错。

1.3请求调度

URL映射是URL和视图函数之间的对应关系。Falsk使用app.route修饰器或者非修饰器形式的app.add_url_rule()生成映射。

Falsk为每个路由都指定了请求方法,这样不同的请求方法发送到相同的URL上时,会使用不同的视图函数进行处理。

1.4请求钩子

请求钩子使用修饰器实现。Falsk支持4种钩子。

  • before_first_request:注册一个函数,在处理第一个请求之前运行。
  • before_request:注册一个函数,在每次请求之前运行。
  • after_request:注册一个函数,如果没有未处理的异常抛出,在每次请求之后运行。
  • teardown_request:注册一个函数,即使有未处理的异常抛出,也在每次请求之后运行。

1.5响应

HTTP响应中一个很重要的部分是“状态码”,默认为200,表示请求已被成功处理。

Flask视图函数还能返回Response对象。make_response()函数可接受1、2或3个参数,并返回一个Response对象。

eg:

from flask import make_response
@app.route('/')
def index():
 response=make_response('<h1>This document carries a cookie!</h1>')
 response.set_cookie('answer',42)
 return response

有一种名为“重定向”的特殊响应类型。这种响应没有页面文档,只告诉浏览器一个新地址用以加载新页面。

重定向常使用302状态码表示,指向的地址由Location首部提供。Flask提供redirect()辅助函数用于生成这种响应:

from flask import redirect
@app.route('/')
def index():
    return redirect('http://www/example.com')

还有一种响应用于处理错误,由abort函数生成:

from flask import abort
@app.route('/user/<id>')
def get_user(id):
  user=load_user(id)
  if nor user:
     abort(404)
return '<h1>Hello,%s</h1>'%user.name

以上例子中,如果URL中动态参数id对应的用户不存在,就返回状态码404。


相关文章
|
2月前
|
数据库 Python
如何使用Flask进行开发?
【9月更文挑战第1天】如何使用Flask进行开发?
49 3
|
25天前
|
前端开发 JavaScript 数据库连接
一、Flask入门介绍
一、Flask入门介绍
37 1
|
3月前
|
SQL 缓存 数据库
神秘编程领域惊现宝藏!Flask 扩展生态究竟隐藏着怎样的神奇力量?快来揭开提升开发效率的秘密!
【8月更文挑战第31天】在 Flask 的世界里,其简洁而强大的核心框架搭配丰富多彩的扩展生态,为开发者带来了无尽可能性。从数据库集成到用户认证,从表单验证到缓存管理,Flask 提供了众多高质量插件,如 Flask-SQLAlchemy、Flask-WTF 和 Flask-Login,大幅提升了开发效率和代码质量。这些扩展如同宝库中的珍宝,等待着我们去探索和利用,但需谨慎选择以避免不必要的复杂性和性能问题。总之,Flask 的扩展生态助力我们更高效地开发 Web 应用,创造更多优秀作品。
34 0
|
4月前
|
API 数据库 开发者
逆袭之路!Django/Flask助你成为Web开发界的璀璨新星!
【7月更文挑战第13天】在Python Web开发中,Django和Flask各具优势。Django适合快速构建大型项目,如在线书店,其ORM和内置功能让复杂应用轻松上手。Flask则以其轻量和灵活性见长,适用于个人博客等小型应用。选择框架应根据项目需求和个人偏好,两者都能助开发者在Web开发领域大放异彩。
47 2
|
4月前
|
数据库 开发者 Python
从菜鸟到大神,Django/Flask 让你秒变 Web 开发界的‘头号玩家’!
【7月更文挑战第12天】在Python Web开发中,Django和Flask框架各具特色。Flask轻量灵活,适合快速搭建简单应用,如博客,基本代码仅需几行。Django则功能全面,适用于复杂项目,如电商网站,内置ORM和管理后台。两者都助力开发者从新手进阶。选择取决于项目需求和个人偏好。学习和实践这两个框架,能助你成为Web开发专家。
55 2
|
4月前
|
JSON 文字识别 数据格式
文本,文字识别,Flask实现内部接口开发,OCR外部接口的开发,如何开发一个识别接口,通过post调用,参数是图片的路径,内部调用,直接传图片路径就行
文本,文字识别,Flask实现内部接口开发,OCR外部接口的开发,如何开发一个识别接口,通过post调用,参数是图片的路径,内部调用,直接传图片路径就行
|
4月前
|
API Python
python flask 提供web的get/post开发
python flask 提供web的get/post开发
45 0
|
4月前
|
开发者 C++ Python
从零到一,Django/Flask带你走进Web开发的梦幻世界!
【7月更文挑战第14天】在Python Web开发中,Django和Flask各具特色。Django是全能框架,提供ORM、模板、认证等全套解决方案,适合快速建站和新手入门;Flask则轻量灵活,适合原型开发和定制化需求。两者都有活跃社区和丰富扩展,Django学习曲线平缓,Flask更需自定义配置。选择适合自己的框架,开启编程新篇章。
50 0
|
前端开发 JavaScript 数据安全/隐私保护
Flask开发微电影网站(十)
1.后台管理之角色管理 1.1 角色管理之定义角色表单 在app的admin目录的forms.py文件中,定义角色表单 # 角色表单 class RoleForm(FlaskForm): name = StringField( label="角色名称", va...
1206 0
|
前端开发 关系型数据库 数据安全/隐私保护
Flask开发微电影网站(九)
1.后台管理之电影管理 1.1 电影管理之所有电影收藏列表 1.1.1 电影管理之电影收藏列表视图函数 在admin目录下的views.py文件中定义电影收藏列表视图函数 电影收藏列表视图函数需要被登录控制装饰器和权限控制装饰器同时装饰 @admin.
1004 0