本文编程学习网主要向大家介绍了Python中的flask框架简介,通过具体的内容向大家展示,希望对大家学习Python知识点有所帮助。
一、Flask简介
Flask 是一个Python编写的一种轻量级的框架,只提供了web框架基本的功能,比其他的框架更加灵活、自由
二、Flask的安装
框架开发的时候,兼容性是一个很大的问题
开发环境:Python3.7版本,Flask1.1.1 版本
-
虚拟环境的使用
工作中会根据需求,在Python环境下使用各种框架和包,但是可能每个项目使用的框架和版本不一样,这样就要根据需要更新和卸载相应的库,为了不必要的麻烦,便于管理,使用虚拟环境
-
anaconda虚拟环境的安装,创建指定Python版本的环境
conda create -n flask_env python=3,7
flask_env:环境的名字,任意,有阅读性
Python=3.7:指定Python的版本
-
激活进入/离开虚拟环境
conda active flask_env
conda deacticve
-
进入虚拟环境,下载flask
pip install flask==1.1.1
查看当前环境下的包
pip freeze
二、创建Flask项目
-
实现最小应用
使用 pycharm 创建一个项目project01,设置Python虚拟环境
-
路由
Flask 根据 HTTP 请求的url在路由表中匹配定义好的路由规则,找到对应的函数处理请求。
在这个过程中需要保存一个url到行数的映射关系,我们把处理url到函数之间的关系成为路由
flask中的路由是使用装饰器的形式定义的,并且必须是/开头,否则报错
-
视图函数
视图函数是处理用户的请求,返回响应的函数代码块
在Flask中视图函数的名字不能重复
-
启动服务器
url路径参数(动态路由)
可以通过请求的url中获取需要的参数。例如:现在定义一个路由/users/,如果请求的url为/users/1,表明想要获取编号为1的用户信息,则这里的1就是请求中传递的参数
@app.route('/users/<sid>')
def hello_world(sid):
return '查询id是{}的用户信息'.format(sid)
上面代码中<>即为转换器语法,默认为字符串类型,即匹配到的内容始终为字符串类型
Flask中其他类型转换器
三、Flask模板系统
flask默认采用是jinja2模板进行模板渲染,jinja2是python第三方的一个模板渲染模块,通常用于flask,tornado框架中,jinja2的开发大量参考了django的模板渲染系统,相似度达到98%
静态文件:css,js,img等这些都是静态文件,flask中默认加载当前目录下的static目录下的静态文件
模板文件:flask默认当前目录下的templates目录下的模板文件
-
调用静态页面
- 新建一个templates目录,存放了html文件
- 导入from flask import render_template模块,调用静态页面
def hello_world():
return render_template("index.html")
-
视图传递参数到模板
如果使用这种方式传递参数,如果变量的数量多的情况下,使用起来不方便,可以使用解包将函数内的所有变量传递到模板中。
html页面参数语法:{{name}}
def hello_world():
name = "老王"
age = 33
gender = "男"
return render_template("index.html",name=name,age=age,gender=gender)
@app.route('/index')
def hello_world():
name = "老王"
age = 33
gender = "男"
return render_template("index.html", **locals())
-
模板语法
-
变量的使用
语法:{{变量名}},jinja2模板引擎支持python中基本数据类型,类变量等
变量可以根据索引或者 . 取出来
jinja2模板引擎可以使用一些python提供的一些方法。例如:upper,replace,lower等方法
比如:{{p.name.replace("老","小")}}
-
控制语句
(1) if语句
(2) for循环
-
{% if age<18 %}
未成年
{% elif age<50 %}
青壮年
{% else %}
老年
{% endif %}
#for循环
{% for i in hobby %}
{{ i }}
{% endfor %}
{% for k,v in info.items() %}
{{ k }}-{{ v }}
{% endfor %}
{% for i in hobby %}
{% if loop.index%2 == 0 %}
{{ loop.index0 }}:{{ i }}
{% else %}
{{ loop.index0 }}:{{ i }}
{% endif %}
{% endfor %}
(3) loop
在for循环中,jinja2还提供一个特殊变量,用来获取当前的遍历状态
-
过滤器
过滤器本质是函数,可以使用过滤器将视图传递过来的值进行修改显示的效果
jinja2提供的常见过滤器:
{{ nick_name | upper }
{{ nick_name | replace("ni","NI") }}
-
自定义过滤器
- 定义过滤器函数
- 注册过滤器函数(函数的名字,过滤器的名字)
def my_add(num1, num2):
return num1 + num2
app.add_template_filter(my_add, "myadd")
四、静态文件
在全栈开发过程中,把css,js,img等非html内容看做是静态内容
在网站有很多资源不存在数据库中,直接放在服务器上,那么这样的资源叫做静态资源
flask在开发过程中,静态文件需要放在默认的静态位置(当前脚本目录下的static目录,并且在html中,使用/static/来代替目录)
五、模板继承与加载
针对网站所有的页面通常使用一个模板,由于风格和需求导致,所有页面都相同的部分,为了减少代码冗余,方便代码修改,出现了继承和加载两种机制
1、继承:
当我们浏览器一个网站的时候发现里面有大部分是相同的,这时候我们为了去除代码的冗余,使用继承。
(1) 定义父模板,在父模板中定义block
(2) 在子模板中继承,根据需要实现父模板中的block
2、包含
将可以常用的页面内容如导航条,尾页信息等不变的组件可以保存到单独的文件中,然后在需要使用敌方按照如下语法导入即可。
{% extends "father.html" %}
{% block title %}{% endblock %}
#包含
{% include "myblock.html" %}
扫码二维码 获取免费视频学习资料
- 本文固定链接: http://phpxs.com/post/10588/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料