快速入门Flask框架(1)

目录

1.Flask框架整体流程:

2.run启动参数详解

3.模板渲染

4.项目拆分

5.路由参数详解

 6.蓝图基本使用

7.Flask请求request

8.重定向Redirect

1.Flask框架整体流程:

2.run启动参数详解

"""app.py"""
#  导入Flask
from flask import Flask
#  创建Flask应用对象
app = Flask(__name__)

#  路由route + 视图函数hello_world
@app.route('/')
def hello_world():
    # 响应:返回给浏览器的数据
    return 'Hello World!'
#  添加一个路由和视图函数
@app.route('/index/')
def index():
    return "Index 首页"
if __name__ == '__main__':
    #  启动服务器
    app.run(debug=True, port=5001, host='0.0.0.0')

    #  run()启动的时候还可以添加参数:
    #      debug  是否开启调试模式,开启后修改过python代码会自动重启
    #      port   启动指定服务器的端口号,默认是5000
    #      host   主机,默认是127.0.0.1,指定为0.0.0.0代表本机所有ip

3.模板渲染

"""app.py"""
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def home():
    #  返回字符串
    return "Flask Home2"

#  模板渲染
@app.route('/index/')
def index():
    #  返回字符串:支持HTML标签
    # return '<b>Flask Index</b>'  一般做测试使用

    #  模板渲染
    return render_template('index.html', name="法外狂徒张三")

    # JSON
    # jsonify: 序列化(把对象转换成字符串)一般都采用这种方法
    #return jsonify({'name': "张三","age": 33})

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

4.项目拆分

项目首先拆成app.py和App包,App包又包含了__init__.py,views.py,templates.py,models.py这几个模块,项目主要运行app.py,
app.py中导入APP包,直接运行__init__.py,采用蓝图这种方式,导入view.py模块的东西,view.py模块再导入models.py模块
运行app.py模块带动其他几个模块的运行,在这个项目中就可以各司其职。

"""app.py"""
from App import create_app

app = create_app()

if __name__ == '__main__':
    app.run(debug=True)
    
"""__init__.py"""
# __init__.py :初始化文件,创建Flask应用

from flask import Flask
from .views import blue


def create_app():
    app = Flask(__name__)

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

    return app

"""view.py"""
# views.py: 路由 + 视图函数

from flask import Blueprint
from .models import *

# 蓝图
blue = Blueprint('user', __name__)


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

5.路由参数详解

string(默认)接受任何不带斜线的文本
int接受正整数
float接受正浮点值
path喜欢string,但也接受斜线
uuid接受 UUID 字符串
any可以同时指定多种路径,进行限定
# views.py: 路由 + 视图函数

from flask import Blueprint
from .models import *

# 蓝图
blue = Blueprint('user', __name__)


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

# string: 重点
# @blue.route('/string/<string:username>/')
@blue.route('/string/<username>/')
def get_string(username):
    print(type(username))  # <class 'str'>
    return username


# int
@blue.route('/int/<int:id>/')
def get_int(id):
    print(type(id))  # <class 'int'>
    return str(id)

# float
@blue.route('/float/<float:money>/')
def get_float(money):
    print(type(money))  # <class 'float'>
    return str(money)


# path: 支持/的字符串
@blue.route('/path/<path:name>/')
def get_path(name):
    print(type(name))  # <class 'str'>
    return str(name)

# uuid:d12fda71-e885-444a-8cbd-5cdcbcb7c232
@blue.route('/uuid/<uuid:id>/')
def get_uuid(id):
    print(type(id))  # <class 'uuid.UUID'>
    return str(id)

@blue.route('/getuuid/')
def get_uuid2():
    import uuid
    return str(uuid.uuid4())


# any: 从列出的项目中选择一个
@blue.route('/any/<any(apple, orange, banana):fruit>/')
def get_any(fruit):
    print(type(fruit))  # <class 'str'>
    return str(fruit)


# methods: 请求方式
#   默认不支持POST
#   如果需要同时支持GET和POST,就设置methods
@blue.route('/methods/', methods=['GET', 'POST'])
def get_methods():
    return 'methods'

 6.蓝图基本使用

1,宏伟蓝图

2,蓝图也是一种规划,主要用来规划urls(路由route)

3,蓝图基本使用

#  在view.py中初始化蓝图
blue = Blueprint('user',__name__)
#  在init文件中调用蓝图进行路由注册
app.register_blueprint(blueprint=blue)

7.Flask请求request

服务器在接受到客户端的请求后,服务器会自动创建一个Request对象。由Flask框架创建,Request对象不可修改

Response:服务器返回给客户端的数据

属性:

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

源码实现:

"""views.py"""
@blue.route('/request/',methods=['GET','POST'])
def get_request():
    #  重要属性
    print(request.method)  #  请求方式,’GET‘或'POST’
    #  GET请求的参数
    #  ImmutableMultiDict:类字典对象, 区别是可以出现重复的key
    print(request.args)  # ImmutableMultiDict([('name', 'lisi'), ('name', 'wangwu'), ('age', '12')])
    """
    print(request.args['name'],request.args['age'])  #lisi 12
    print(request.args.get('name'))  #  lisi
    print(request.args.getlist('name'))  #  ['lisi', 'wangwu']
    """
    #  POST请求
    print(request.form)  #  ImmutableMultiDict([('name', 'Lucy'), ('age', '13')])
    #print(request.form.get('name'))  #  Lucy
    #  查找方式和get请求一样

    #  cookie
    print(request.cookies)  #  ImmutableMultiDict([('age', '14'), ('name', 'zhaosi')])

    #  路径
    print(request.path)  #  /request/
    print(request.url)  #  http://127.0.0.1:5000/request/?name=lisi&name=wangwu&age=12
    print(request.base_url)  #  http://127.0.0.1:5000/request/
    print(request.host_url)  #  http://127.0.0.1:5000/
    print(request.remote_addr)  #  127.0.0.1, 客户端的ip

    print(request.files)  #  文件内容,ImmutableMultiDict([])
    print(request.headers)  #  请求头
    print(request.user_agent)  #  用户代理, 包括浏览器和操作系统的信息, python-requests/2.32.3

    return 'request ok'

"""spider爬虫.py"""
import requests

#  GET请求
res = requests.get('http://127.0.0.1:5000/request/?name=lisi&name=wangwu&age=12',
                   cookies={"name": "zhaosi", "age": "14"})
print(res.text)

#  POST请求
#res = requests.post('http://127.0.0.1:5000/request/', data={"name": "Lucy", "age": 13})
#print(res.text)

在这里又写了一个spider爬虫.py文件,是为了在这个文件中可以直接看见前端的运行结果。

响应:

"""views.py"""
#  Response: 服务器端向客户端发送的响应
@blue.route('/response/')
def get_response():
    pass
    #  响应的几种方式
    #  1.返回字符串(不常用)
    #  return 'response ok'
    #  2.模板渲染(前后端不分离)
    #  return render_template('index.html', name='lisi', age=33)
    #  3.返回json数据(前后端分离)
    data = {"name": "lisi","age": 44}
    #  return data
    #  jsonify(): 序列化,字典=>字符串
    #  return jsonify(data)
    #  4.自定义Response对象
    html = render_template('index.html', name='lisi', age=33)
    print(html, type(html))
    #  res = make_response(html, 200)
    res = Response(html)
    return res

8.重定向Redirect

#  views.py
#  Redirect: 重定向
@blue.route('/redirect/')
def get_redirect():
    #  重定向的几种方式
    #  return redirect('https://www.qq.com')
    #  return redirect('/response/')

    #  url_for(): 反向解析, 通过视图函数名反过来找到路由
    #  url_for('蓝图名称.视图函数名')
    #  ret = url_for('blue.get_response')
    #  print("ret:",ret)  #  '/response/'
    #  return redirect(ret)

    #  url_for()传参
    ret2 = url_for('blue.get_response', name='王五', age=66)
    return redirect(ret2)

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值