Python Flask框架学习第一天

Flask 简介

一个非常小的框架,可以称之为微型框架,只提供一个强劲的核心,其他的功能都需要使用拓展来实现。意味着可以根据自己的需求量身打造。

Flask 组成

  • 调试、路由、wsgi系统
  • 模板引擎(JInja2)

Flask 的简单使用

# 导入 Flask 类库
from flask import Flask
# 创建应用实例
app = Flask(__name__)
# 视图函数(路由)
@app.route('/')
def index():
    return "Hello World"
# 启动
if __name__ == "__main__":
    app.run()
  • Flask - 参数是应用模块或者包的名称。如果使用单一模块,就应当使用__name__。这个参数是必须的,这样Flask才能知道在哪里可以找到模板和静态文件。
  • name - Python的内置类属性,代表对应程序的名称。自己运行这段代码,name 的值为 main(一段程序作为主线运行程序时其内置名称就是__main__)。我管自己叫我自己(main),但在其他人眼里我就是小仙女(xxx)
  • @ - 装饰器。本质上是一个函数,可以让其他函数在不需要做任何代码变动的前提下增加额外功能。装饰器的返回值也是一个函数对象(函数指针)。
    • 实质:是一个函数
    • 参数:要装饰的函数名(并非函数调用)
    • 返回:装饰完的函数名(也不是函数调用)
    • 作用:为已经存在的对象添加额外的功能
    • 特点:不需要对对象做出任何代码上的改动
  • Run 方法参数
    • debug - 代码更新是否自动重启,默认值:False
    • theaded - 是否开启多线程,默认值:False
    • port - 指定端口,默认值:5000
    • host:指定主机(设置0.0.0.0可以通过本地IP访问),默认值:127.0.0.1
  • 请求和相应
    • current_app - 相当于在主程序中激活的实例化 app(app=Flask(name))
    • g - 一次性函数,处理请求的临时变量。只在一个请求中被应用,下个请求开始时会自动充值
    • requests - 请求对象,存放客户端发来的HTTP信息
    • session - 记录用户和服务器之间的会话的。在服务器端记录需要记住的信息,(和cookie对应,cookie是存放在客户端)。
  • 请求钩子装饰器
    • before_first_request - 第一次请求之前
    • before_request - 每次请求之前
    • app.after_request - 没有异常,每次请求结束后
    • app.teardown_request - 有异常也会运行,每次请求结束后

视图函数

带参数的视图函数
# 带参视图函数
@app.route('/user/username')
def say_hello(username):
    return f"你好啊,{username}"
带类型限定的视图函数
# 类型限定的视图函数
@app.route('/user/<path:info>')
def test(info):
    return info

备注:path:info之间不能有空格。

获取 request 请求值

from flask import Flask, reuqest
... # 省略创建等内容
@app.route('/request/<path:info>')
def request_url(info):
    return request.url
    '''
    http://127.0.0.1:5000/request/test?username=assd&pwd=123456
    '''
    return request.base_url
    '''
    http://127.0.0.1:5000/request/test
    '''
    return request.host_url
    '''
    http://127.0.0.1:5000/
    '''
    return request.method # GET
    return request.remote_addr # 127.0.0.1
    return request.args.get('username') # assd
    return request.args.get('pwd') # 123456
    return str(request.args)
    '''
    ImmutableMultiDict([('username', 'assd'), ('pwd', '123456')])
    '''
    return request.headers.get('User-Agent')
    '''
    Mozilla/5.0 ...
    '''

响应构造

@app.route('/response')
def response():
    # 不指定状态码,默认为200,表示可以访问。
    # return 'OK'
    # 构造 404 状态码
    # 方法一
    return 'Not Found', 404
    # 方法二
    # 导入 make_response
    # 自定义构造一个相应,然后返回200, 构造也可以指定404
    res = make_response('我是通过函数构造的响应', 404)
    return res

重定向

@app.route('/old/')
def old():
    return redirect('https://www.baidu.com/')
    return redirect('/new/')
    return redirect(url_for('new'))
    return redirect(url_for('say_hello', username='小明'))
@app.route('/new/')
def new():
    return "This is a new content!"

Abort

@app.route('/login')
def login():
    # return '正常登陆'
    abort(404)

报错:ValueError: urls must start with a leading slash
原因:路由名前缺少 ‘/’

会话控制

Cookie
@app.route('/set_cookie/')
def set_cookie():
    resp = make_response("设置cookie")
    expires = time.time() + 10
    resp.set_cookie('name', 'xiaoming', expires=expires)
    return resp
def get_cookie():
	return request.cookie.get('name') or 'who are you?'
Session
app.config['SECRET_KEY'] = os.urandom(18)
@app.route('/set_session/')
def set_session():
    session['username'] = 'xiaowu'
    return 'session已经设置了'
@app.route('/get_session/')
def get_session():
    return session.get('username', 'who are you?')

Jinja模板常用函数

  • capitalize-首字母大写
  • upper-全部大写
  • lower-全部小写
  • title-每个单词首字母大写
  • trim-去掉两边空白
  • striptags-去掉所有的HTML标签
  • safe-删除标签,又保留标签功能
函数使用方法
  1. 在要解析的变量的后面添加一个 |
  2. 在 | 的后面他添加一个需要处理的函数
Jinja继承模板
{% extends 'model.html' %}
{% block title %}{% endblock%}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值