IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> PythonWeb框架——Flask(Flask基础与jinja2模板使用) -> 正文阅读

[Python知识库]PythonWeb框架——Flask(Flask基础与jinja2模板使用)

Python web学习之Flask框架

一、flask基础

1、flask简介

Flask是一个使用 Python 编写的轻量级 Web 应用框架。

模板引擎使用Jinja2。

协议使用WSGI协议。

2、Flask的安装

建议在虚拟环境下的终端输入:

pip install Flask

3、第一个Flask程序

使用下述代码创建一个Flask实例对象

from flask import Flask
# 初始化Flask对象,传入__name__这个变量值
# __name__代表这个模块本身
app = Flask(__name__)

注意:必须从flask中引入Flask对象

定义视图函数

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

app.route装饰器映射URL和执行的函数。这个设置将根URL映射到了hello_world函数上

4、项目配置

在项目目录下创建config.py文件

引入配置项两种方式:

app.config.from_object(config)

silent=True 表示如果配置文件不存在的时候不抛出异常

app.config.from_pyfile('config.py',silent=True)

例如:app.py中书写Hello World

from flask import Flask
app = Flask(__name__)
app.config.from_object(config)
# 设置访问的url,这里是根路径
@app.route('/')
def hello_world():
    return "hello world"
if __name__ == "__main__":
    app.debug = True
    # app.run(debug=True) 可将配置传入参数
    app.run()

5、URL与视图

上述已经提到过@app.route 装饰器中,可以指定URL。

1、URL传递参数

语法: @app.route('.../<参数名>/')

例如:传递用户的id作为url参数

from flask import Flask
app = Flask(__name__)
@app.route('/user/<id>')
def user(id):
	return "用户id为: {}".format(id)
if __name__ == "__main__":
    app.debug = True
    app.run()

2、URL反转

根据视图函数名称得到当前所指向的URL

url_for()接收两个及以上的参数

from flask import Flask
app = Flask(__name__)
def index():
	url=(url_for('user',id='2022'))
	return "URL反转内容为{}".format(url)
@app.route('/user/<id>')
def user(id):
	return "用户id为: {}".format(id)
if __name__ == "__main__":
    app.debug = True
    app.run()

也可以使用url_for()来引入外部文件

<script type="text/javascript" src="{{ url_for('static',filename='js/jquery.js') }}"> </script>
<img src="{{url_for('static',filename='images/1.jpg')}}" alt="">

6、页面跳转重定向

一般用于,希望用户登陆后才能访问某页面。如果用户未登录,浏览器由当前页跳转到登录页。

语法: redirect(url)

#首先导入redirect
from flask import Flask,redirect
app = Flask(__name__)
@app.route('/')
def index():
    url=url_for('user_login')
    return redirect(url)

@app.route('/user_login')
def user_login():
    return "登录页"
if __name__ == "__main__":
    app.run(debug=True)

二、Jinja2模板

1、渲染模板

要渲染一个模板,通过render_template方法即可

tianhai()函数会在当前目录下的templates文件夹下找到tianhai.html文件进行渲染。

from flask import Flask,render_template
app = Flask(__name__)

@app.route('/tianhai/')
def tianhai():
    return render_template('tianhai.html')

如需更改寻找路径,可以给Flask配置上 template_folder参数

from flask import Flask,render_template
app = Flask(__name__,template_folder=r'D:\文件\Flask学习\templates')

@app.route('/about/')
def about():
    return render_template('about.html')

当需要将参数传递给模板文件时,可以在 render_template()中配置

@app.route('/about')
def about():
    context = {
        "age":18,
        "username":"天海",
        "books":["红楼梦","三体"],
        "person":{"name":"天海","age":18},
        "content":"<a href='www.baidu.com'>百度</a>"
    }
    return render_template('about.html',**context)

也可以使用 locals()将视图函数中所有的变量全部渲染到模板上,

字典类型返回当前位置的全部局部变量

@app.route('/about')
def about():
	title='pythonweb'
	username="天海"
    return render_template('about.html',**locals())

前端模板的使用:想展示title和username中的内容

<h1>
    {{title}}
    {{username}}
</h1>

2、if条件语句

if条件判断语句必须放在{% if statement %}中间,并且还必须有结束的标签{% endif %}。和python中的类似,可以使用>,<,<=,>=,==,!=来进行判断,也可以通过and,or,not,()来进行逻辑合并操作。

<!--condition为条件-->
{% if condition %}
<!--条件不满足时-->
{% else %}
<!--结束标识-->
{% endif %}

也可以使用 elif

{% if condition1 %}
{% elif condition2 %}
{% elif condition3 %}
...
{% else %}

3、常用模板过滤器

{{ name|length }}:将name的长度返回

{{names|first}}:将names序列的第一个元素返回

{{names|last}}:将names序列的最后一个元素返回

{{age|int}}:将age转换为int返回

{{-1|abs}}:将-1的绝对值返回

escape(value)或e:转义字符,会将<>等符号转义成HTML中的符号。例如:content|escapecontent|e

{{ "%s" - "%s"|format('Hello',"Tian") }}:格式化字符串,返回 Hello - Tian

{{content|replace(content,111)}}:将content替换为 111

{{content|striptags}}:删除字符串中所有的HTML标签,如果出现多个空格,将替换成一个空格。

{{content|wordcount}}:计算一个长字符串中单词的个数。

4、循环语句

循环可以遍历任何一个序列

普通遍历语法:

<ul>
{% for user in users %}
<li>{{ user.username|e }}</li>
{% endfor %}
</ul>

遍历字典

<dl>
{% for key, value in my_dict.iteritems() %}
	<dt>{{ key|e }}</dt>
	<dd>{{ value|e }}</dd>
{% endfor %}
</dl>

结合else

<ul>
{% for user in users %}
	<li>{{ user.username|e }}</li>
{% else %}
	<li><em>no users found</em></li>
{% endfor %}
</ul>
变量描述
loop.index当前迭代的索引(从1开始)
loop.index0当前迭代的索引(从0开始)
loop.first是否是第一次迭代,返回True或False
loop.last是否是最后一次迭代,返回True或False
loop.length序列的长度

上表用来获取当前的遍历状态

5、测试器

Jinja中常用的内置测试器

测试器说明
callable(object)是否可调用
defined(object)是否已经被定义了。
escaped(object)是否已经被转义了。
upper(object)是否全是大写。
lower(object)是否全是小写。
string(object)是否是一个字符串。
sequence(object)是否是一个序列。
number(object)是否是一个数字。
odd(object)是否是奇数。
even(object)是否是偶数。

用法:

{% if Vue is defined%}
    value of Vue: {{ defined }}
{% else %}
    variable is not defined
{% endif %}

6、模板的继承

Jinja中实现了模板的继承。在Vue中,我们可以通过定义单页面组件来实现某一可复用的组件,这里模板的继承和其类似。

用法:

先写一份 base.html作为可复用继承的页面元素。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title%}{% endblock%}</title>
    {% block head %}{% endblock %}
</head>
<body>
    <ul>
        <li>
            <a href="/">首页</a>
        </li>
        <li>
            <a href="/control">设置</a>
        </li>
        <li>
            <a href="/about">关于我</a>
        </li>
    </ul>
{% block body %} {% endblock %}
<footer style="background-color:#ccc ">我是底部</footer>
</body>
</html>

index.html 中继承该模板:

语法 : {% extends "xxx.html" %}

{% extends "base.html" %}

{% block title %}
    首页部分
{% endblock %}

{% block head %}
    <link rel="stylesheet" href="{{url_for('static',filename='css/index.css')}}">
{% endblock %}

{% block body %}
    <h1>我是首页</h1>
{% endblock %}

7、静态文件的配置

如上面模板继承中的子页面中, {% block head %}内部写的那样。

使用 url_for来加载静态页面

例:其中第一个参数为,目录下需要引入静态文件的文件夹,第二个参数为接上需要引入的文件名在第一个参数写的目录内的路径

<link rel="stylesheet" href="{{url_for('static',filename='css/index.css')}}">

上述情况为Flask指定的路径,如需自定义可写如下代码

app = Flask(__name__,static_folder='C:\static')

这样就自动寻找 C:\static目录下的文件了

我是首页

{% endblock %} ```

7、静态文件的配置

如上面模板继承中的子页面中, {% block head %}内部写的那样。

使用 url_for来加载静态页面

例:其中第一个参数为,目录下需要引入静态文件的文件夹,第二个参数为接上需要引入的文件名在第一个参数写的目录内的路径

<link rel="stylesheet" href="{{url_for('static',filename='css/index.css')}}">

上述情况为Flask指定的路径,如需自定义可写如下代码

app = Flask(__name__,static_folder='C:\static')

这样就自动寻找 C:\static目录下的文件了

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-10-08 20:37:01  更:2022-10-08 20:39:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/20 15:20:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码