Flask第一弹:从零开始

一, HTTP从请求到响应的过程

1- 域名解析。
一个域名(www.baidu.com)对应这一个IP地址。 使用DNS域名解析其对应的IP
2- TCP三次握手
(1) 客户端向指定服务器发送报文(报文分两段: 请求连接服务器数据+验证信息),客户端进入同步发送状态(SYN_Send)
(2) 服务器接收到报文后, 处理客户端验证信息后也向客户端发送报文(报文同样分两段, 请求连接客户端数据+处理后的验证信息),此时服务器进入同步接收状态(SYN_RECV)
(3) 客户端接收到服务器的报文后校验正确,发送确认包给服务器。 此时服务器和客户端均转为为确认连接状态(ESTABLISHED)。
…三次握手成功
3- TCP连接建立后, 客户端开始发起HTTP请求。
4- 服务器收到HTTP请求后,返回响应(json, html页面 或者 字符串)。
5- 浏览器解析html页面, 并获取html中的资源(图片或者一些js请求)。
6- 浏览器渲染html, 之后呈现给客户
7- TCP断开

在这里插入图片描述

NOTE: http的特点有简单快速, 其连接为短连接或者叫做无连接。是由客户端向服务器发送请求,服务器返回响应后就断开连接。

二,响应状态码

状态码详情查看以下链接
状态码详解

三, Flask框架介绍

1- Flask框架是一个基于python的微型框架。
2- Flask依赖两个外部库:

	(1)Jinja2 模板引擎{% %}. 模板:静态html+模板语言{%%}
	(2)Werzeug WSGI工具集

3- Flask是一个基于MVC设计模式的Web后端框架

		M 指 Model 数据模型
		V 指 View 界面
		C 指 Controller 控制器

四, 第一个Flask项目

1- 创建虚拟环境。 进入cmd输入

mkviertualenv flask_env

2- 在虚拟环境中安装flask

pip install flask

3- 创建helloFlask.py文件, 并写入以下代码:

from flask import Flask


# 创建一个Flask对象
app = Flask(__name__)


@app.route('/')
def index():
    """
    视图函数
    :return:
    """
    return "hello flask"


if __name__ == '__main__':
    # 启动Flask应用
    """
        host: 主机(ip), 如果'0'或者'0.0.0.0'。 则其他机器可以使用IP能访问。
        port: 端口,   不要与其他端口冲突。
        debug:  调试, 如果状态为True,页面异常后修复可以自动刷新
    """
    app.run(host="0.0.0.0", port=6666, debug=True)

具体如下
在这里插入图片描述

4-run的说明
run中有3个参数

五, Flask拆分

0- 目的

当需要开发一个Flask项目时, 功能不会太少,所以一个正常的flask项目是需要足够的规范来避免项目维护困难

1- 拆分目录
在这里插入图片描述

2- 各个文件的功能

1- static:存放css活着js文件

h3 {color: red}

2- template: 存放html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Flask</title>
    <link rel="stylesheet" href="../static/index.css">
</head>
<body>
    <h1>博客首页</h1>
    <br>
    <h3>欢迎登录</h3>
</body>
</html>

3- init.py: 创建app对象并串联各个部分

from flask import Flask
from App.views import blue


def create_app():
    app = Flask(__name__)

    # 注册蓝图
    app.register_blueprint(blueprint=blue)

    return app

4- views.py: Flask的启动项

from flask import Blueprint
from flask import render_template


blue = Blueprint('user', __name__)


@blue.route('/')
def hello_world():
    return 'Hello World!'


@blue.route('/index/')
def index():
    return render_template('index.html')

5- manage.py: Flask的启动项

from App import create_app


app = create_app()


if __name__ == '__main__':
    app.run(debug=True)

六, 路由的参数

1- 路由路径参数大致分为 str, int, float, path, uuid, any
这些类型限制了路由的传参格式,也是对路由的一种管控

from flask import Blueprint
from flask import render_template


blue = Blueprint('user', __name__)


@blue.route('/')
def hello_world():
    return 'Hello World!'


@blue.route('/index/')
def index():
    return render_template('index.html')


# 传入 str, int, float, path, uuid
@blue.route('/book/<string:bookname>/')
def book(bookname):
    return f"获取到的书籍名称为: {bookname}"


# 传入几个选项
@blue.route('/animal/<any(cat,dog,pig,mouse):animal>/')
def animal(animal):
    return f"抓到了: {animal}"

2-路有中的请求参数
请求参数有很多, 最常用的为以下四种 GET, POST, DELETE, PUT

# GET, POST, DELETE, PUT
@blue.route('/blogpost/<blog_name>', method=['GET', 'POST'])
def blog_post(blog_name):  # put application's code here
    return f"文章内容: {blog_name}"

七, Request请求

1- Flask中内置了request包, 使用以下代码进行导入

 from flask import request

2- Request的属性和方法

url: 完整的请求地址
base_url: 去掉GET参数的URL
host_url: 只有主机和端口号的URL
path: 路由中的路径
method: 请求方法
remote_addr: 请求的客户端地址
args: GET请求参数
form: POST请求参数
files: 文件上传
headers: 请求头
cookies: 请求中的cookie

八, Response响应

Flask中的4种响应方式

1- 直接返回字符串, 可以返回文本内容

return 'Hello World!'

2- render_template渲染模板

return render_template('index.html')

3- 通过make_response(data, code)返回

res = make_response('<h3>红楼梦</h3>')
return res

4- 返回Response对象

html = render_template('index.html')
res = Response(html)
return res

重定向

url = 'https://www.baidu.com'
# return redirect(url)
return redirect('/price/')

定制异常页面

@blue.route('/abort/')
def make_abort():
    abort(502)
    return "error"


@blue.errorhandler(502)
def error_handler(e):
    print("e", e)
    return "捕获到了异常"

九, Flask中使用Cookie

1- cookie是一种会话保持技术
2- 数据全部存储在客户端本地
3- 存储使用的键值对结构进行存储

1)设置cookie

response.set_cookie(key, value)

2)获取cookie

request.cookie.get(key)

2)删除cookie

response.delete_cookie()

具体使用见详情
https://editor.csdn.net/md/?articleId=127818418

十, Template页面展示

Template是使用Jinja2的模板引擎

1- 结构标签

block操作–挖坑


{% block xxx %}
{% endblock %}

extends操作–继承

继承指定的模板
{% extends xxx %}
保留块中的内容
{% super() %}

include操作–包含

{% include xxx %}

marco操作–宏操作

{% from xxx import xxx %}
{% marco hello(name) %}
	{{name}}
{% endmarco %}

2- 语法

1- for循环的使用和参数:
loop.first
loop.last
loop.index
loop.revindex

{% for item in items %}
	AA
{% else %}
	BB
{% endfor %}

2- 过滤器
capitalize
lower
upper
title
trim
safe
reverse
first
last
sum
,…

对一些变量进行简单的过滤操作
{{ val | lower}}

十一, Model数据库操作

详情见以下链接

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值