Python编程:Flask入门到精通(1)

简介: Python编程:Flask入门到精通(1)

HTTP通讯过程

浏览器 -> HTTP请求

-> TCP传输 -> 服务器

-> 接收请求 -> 解析报文

-> 路由分发 -> 执行视图函数

-> 响应报文 -> HTTP响应

-> 浏览器


前端和后端

前端:

-浏览器

-手机app

-爬虫

-程序urllib urllib2 ajax


后端:

服务器 + WSGI + web框架程序(路由+视图)


uWSGI Django(进行路由分发,定义视图函数)

process=4

thread=2


服务器模型(并发)

-多进程

-多线程

-协程


web框架程序

重量级框架:Django

轻量级框架:Flask, Tornado


Django

提供了一站式解决方案

集成了 MVT(model view template)

ORM


Flask

路由:Werkzeug工具箱

模板:Jinja2


Flask扩展包

Flask-SQLalchemy 操作数据库

Flask-migrate 迁移数据库

Flask-Mail 邮件

Flask-WTF 表单

Flask-script 脚本

Flask-Login 认证用户状态

Flask-RESTful rest api

Flask-Bootstrap 前端框架Bootstrap

Flask-Moment 本地化日期和时间


虚拟环境

如果使用sudo就不是当前虚拟环境了

-p path 路径

pip freeze > requirement.txt

pip install -r requirement.txt


Flask配置启动

不要使用from flask import *

__name__当前模块名字

flask默认传入文件名所在目录为根目录,找不到模块则当前文件所在目录为根目录


1、Flask初始化参数


import_name  导入路径
static_url_path  静态资源url前缀
static_folder 静态资源目录 默认static
template_folder 模板文件目录 默认templates

2、Falsk配置参数设置


# (1)使用配置文件 
DEBUG=True > config.cfg 
app.config.from_pyfile("config.cfg")
# (2)使用对象配置参数
class Config(Object):
    DEBUG=True
app.config.from_object(Config)
# (3)直接操作config字典对象
app.config["DEBUG"] = True

3、Falsk配置参数读取


# (1)直接操作config字典对象
app.config.get("DEBUG")
# (2)通过current_app获取
current_app.config.get("DEBUG")

4、Falsk启动程序

局域网和外网都可以访问


app.run(host="0.0.0.0", port=5000, debug=True)

路由视图

1、查看flask路由信息

app.url_map


2、设置请求方式

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

路由相同,路径和请求方式相同,先定义先访问

路由不同,路径和请求方式不同


3、一个视图多个路由

不同路由可以通过装饰器叠加,添加到一个视图函数之上


@app.route("/1")
@app.route("/2")
def view():
    pass

4、重定向


from flask import redirect, url_for
# 视图反推路径
url = url_for("index")
# 重定向
 redirect("/")

5、路由参数提取


@app("/<int:uid>")
def view(uid):
    pass
# 接受参数:默认string(除了斜线/), int, float, path

6、自定义万能路由转换器


# (1)继承转换器类
from werkzeug.routing import BaseConverter
class RegexConverter(BaseConverter):
    def __init__(self, url_map, regex):
        # 调用父类的初始化方法
        super(RegexConverter, self).__init__(url_map)
        # 将正则表达式的参数保存到对象属性中
        # flask会去使用这个属性进行路由的正则匹配
        self.regex = regex
    def to_python(self, value):
        return value
    def to_url(self, value):
        return value
# (2)将自定义的转换器添加到flask应用中
app.url_map.converters["re"] = RegexConverter
# (3)使用自定义转换器路由匹配 to_python
#/13512345678
@app.route("/<re(r'1[34578]\d{9}'):mobile>")
def send(mobile):
    pass
# (4)视图转换为路由url to_url
@app.route("/")
def index():
    url = url_for("send", mobile="13511111111")
    return redirect(url)

request对象

from flask import request

属性

data 请求体数据(除表单外) string

form 表单数据 MultiDict

args url查询参数 MultiDict

cookies cookies信息 Dict

headers 报文头 EnvironHeaders

method HTTP方法 GET/POST

url url地址 string

files 上传的文件 *


前端参数

(1)form表单格式 POST

application/x-www-form-urlencoded

name=“Tom”&age=23


request.form.get() 同键多值取第一个

request.form.getlist() 取出同键所有值


(2)多媒体格式 POST

enctype=“multipart/form-data”

file = request.files.get(“file”)

file.save(“file.txt”)


(3)raw字符串

(4)binary

(5)args查询字符串 QueryString GET

?key=value&key=value

request.args.get()


python2字符串类型

a=“中国” str “utf-8” “gbk” “ascii”

a=u"中国" unicode


“中国 %s” % “abc”

ASCII cannot decode \xxx\xxx

->

u"中国 %s" % “abc”


上下文管理器

with open("test.txt", "w") as f:
    f.write("something")

自定义上下文管理器

class Foo(object):
    def __enter__(self):
        pass
    def __exit__(self, exc_type, exc_value, exc_traceback):
        pass
with Foo() as f:
    pass

错误处理

1、abort方法

可以终止视图函数执行,并返回给前端特定信息


from flask import abort
# (1)传递标准状态码信息
abort(400)
# (2)传递响应体信息
from flask import Response
abort(Response("message"))

2、自定义错误处理


         

响应信息

1、元组

响应体, 状态码(可以是非标), 响应头


return "message", 404, [("language": "python")]
return "message", 404, {"language": "python"}
return "message", "404 status message", {"language": "python"}

2、make_response


from flask import make_response
resp = make_response("message")  # 响应体
resp.status = "666 status"  # 状态码
resp.headers["language"] = "python"  # 响应头
return resp

3、返回json

json就是字符串

原理:json.dumps() + Content-Type: application/json


#(1)方式一
return jsonify({"name": "Tom"})
#(2)方式二
return jsonify(name=Tom")

cookie

1、设置cookie


默认临时cookie,浏览器关闭就失效,max_age设置有效期,单位:秒s


from flask import make_response
resp = make_response("message")
#(1)通过原始方式设置
resp.set_headers["Set-Cookie"] = "key=value;"
#(2)通过flask提供的方式设置
resp.set_cookie("key", "value", max_age=3600)
return resp

2、获取cookie


from flask import request
value = request.cookies.get("key")

3、删除cookie

设置cookie的过期时间为当前时间,让浏览器自己删除


from flask import make_response
resp = make_response("message")
resp.delete_cookie("key", "value")
return resp

session

广义:机制

狭义:保存到服务器中的session数据


浏览器 <- cookie(session_id) -> 服务器 <—> 数据库MySQL


session保存的地方:

MySQL、Redis、MongoDB、文件、程序内存(不支持多服务器)


flask默认把session保存到了cookie中, 不安全


只使用session_id

(1)保存到cookie

(2)保存到url中,具有局限性,适用于单次访问


# 1、设置session秘钥, 加密混淆,防止session被篡改
app.config["SECRET_KEY"] ="ooxx"
# 2、设置session数据
from flask import session
session["key"] = "value"
# 3、获取session数据
value = session.get("key")

请求上下文与应用上下文

(1)请求上下文

request, session对象都是全局对象

全局变量 - 线程局部变量


(2)应用上下文

current_app 当前运行程序文件的程序实例

g 处理请求时,用于临时存储的对象,每次请求都会重置,用于一次请求多个函数传参

g.name = "张三"

相关文章
|
16天前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
14天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
3天前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
97 80
|
1天前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
14 2
|
15天前
|
小程序 开发者 Python
探索Python编程:从基础到实战
本文将引导你走进Python编程的世界,从基础语法开始,逐步深入到实战项目。我们将一起探讨如何在编程中发挥创意,解决问题,并分享一些实用的技巧和心得。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考。让我们一起开启Python编程的探索之旅吧!
41 10
|
15天前
|
测试技术 开发者 Python
探索Python中的装饰器:从入门到实践
装饰器,在Python中是一块强大的语法糖,它允许我们在不修改原函数代码的情况下增加额外的功能。本文将通过简单易懂的语言和实例,带你一步步了解装饰器的基本概念、使用方法以及如何自定义装饰器。我们还将探讨装饰器在实战中的应用,让你能够在实际编程中灵活运用这一技术。
36 7
|
14天前
|
人工智能 数据挖掘 开发者
探索Python编程之美:从基础到进阶
本文是一篇深入浅出的Python编程指南,旨在帮助初学者理解Python编程的核心概念,并引导他们逐步掌握更高级的技术。文章不仅涵盖了Python的基础语法,还深入探讨了面向对象编程、函数式编程等高级主题。通过丰富的代码示例和实践项目,读者将能够巩固所学知识,提升编程技能。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考和启示。让我们一起踏上Python编程的美妙旅程吧!
|
15天前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
42 3
|
关系型数据库 数据库 开发工具
利用Flask + python3.6+MYSQL编写一个简单的评论模块。
利用flask + python3.6+MYSQL编写一个简单的评论模块。输入内容提交后,会显示在页面上。 发送并接受评论框的数据 在falsk返回首页的函数前,加入methods属性。 @app.route("/", methods=["GET", "POST"]) 两种接收数据的方式 暂时性的保存,并显示在网页上.in-memory storage 主程序如下,每当程序reload时候,comments会被初始化。
2708 0
|
27天前
|
JSON 前端开发 API
使用Python和Flask构建简易Web API
使用Python和Flask构建简易Web API
下一篇
DataWorks