Python初始Flask框架
目录
一,理解Flask框架
2,安装并运行Flask应用
1,创建一个基本的flask应用
2,配置flask动态路由
3,配置flask支持多种http请求方法
二,使用jinja2模板渲染HTML
三,模板继承与快
1,首先定义基础模板base.html
2,定义子模板indes.html
四,Flask表单处理与用户输入
一,理解Flask框架
Flask 是一个轻量级的 Python Web 应用框架,被归类为 "微框架"(Microframework)。它的核心设计理念是保持简单而灵活,仅提供 Web 开发的基础功能,而不强制使用特定的数据库或模板引擎,允许开发者根据需求自由选择和集成各种扩展,Flask作为一个微框架,特点简单性和灵活性,它依赖于两个重要的Python库来提供核心功能:
- Werkzeug: 这是 Flask 的底层库,提供了 WSGI 接口、HTTP 请求和响应处理、路由等核心功能
- Jinja2: 一个功能强大的模板引擎,用于动态生成 HTML 页面。
Flask 的设计目的是让开发者能够快速开发应用,并提供了灵活的方式进行扩展。如果你不需要复杂的功能,Flask 的核心本身已经足够满足需求,Flask的特点及主要用途如下:
1,主要特点
- 轻量级核心:Flask 的核心代码简洁,不包含 ORM、表单验证等功能,仅保留 Web 服务器网关接口(WSGI)、路由、请求处理等基础组件。
- 高度可扩展:通过第三方扩展,轻松添加数据库集成、REST API 支持、身份验证等功能。
- 内置开发服务器:方便开发调试,支持自动重载代码。
- 模板引擎:默认使用 Jinja2 模板引擎,支持模板继承和丰富的表达式语法。
2,主要用途
- web应用开发:快速搭建博客、企业网站、内容管理系统等。
- 原型开发:由于其简洁性,适合快速实现产品原型。
- 小型项目:对于资源有限或功能简单的项目,Flask 比 Django 等全栈框架更轻量高效。
2,安装并运行Flask应用
直接使用python的包管理工具安装即可:
pip3 install flask
如果安装太慢可以设置,更新镜像源
pip3 config set global.index-url http://mirrors.aliyun.com/pypi/simple
pip3 config set install.trusted-host mirrors.aliyun.com
pip3 install --upgrade pip
1,创建一个基本的flask应用
[root@localhost one]# vim flask1.py
from flask import Flaskapp=Flask(__name__)@app.route('/')
def hello_world():##定义站点名称return 'Hello,World!\n'if __name__ == '__main__': ##创建用户入口app.run(host='0.0.0.0',port=5000,debug=True)[root@localhost one]python3 flask1.py ##运行脚本,在前台运行
......./省略部分内容* Running on all addresses (0.0.0.0)* Running on http://127.0.0.1:5000* Running on http://192.168.10.101:5000[root@localhost one]# curl 192.168.10.101:5000 ##使用其他终端进行访问验证
Hello,World!
2,配置flask动态路由
flaks支持动态路由参数,可以通过url中的动态部分来获取数据。
from flask import Flaskapp=Flask(__name__)@app.route('/')
def hello_world():##定义站点名称return 'Hello,World!\n'@app.route('/greet/<name>') ##可以在flask框架中添加部分内容
def greet(name):return f'ni hao,<name>\n'[root@localhost one]# curl 192.168.10.101:6000/greet/lisi ##greet后面的内容就相当于一个变量,它的值为用户决定。
ni hao,lisi
[root@localhost one]# curl 192.168.10.101:6000
Hello,World!
3,配置flask支持多种http请求方法
^C[root@localhost ~]# cat flask2.py
from flask import Flaskapp=Flask(__name__)@app.route('/')
def hello_world():##定义站点名称return 'Hello,World!\n'@app.route('/greet/<name>')
def greet(name):return f'ni hao,{name}\n'@app.route('/submit',methods=['POST']) ##在flask继续添加此部分,当用户请求方法不为POST则拒绝
def submit():return '提交成功\n'
验证
[root@localhost ~]# curl 192.168.10.101:6000/submit ##默认请求方法不为POST则访问不成功
<!doctype html>
<html lang=en>
<title>405 Method Not Allowed</title>
<h1>Method Not Allowed</h1>
<p>The method is not allowed for the requested URL.</p>[root@localhost ~]# curl -X POST 192.168.10.101:6000/submit ##-X指定POST请求方法可以访问到
提交成功
二,使用jinja2模板渲染HTML
Flask 结合 Jinja2 模板引擎来动态生成 HTML 页面。你可以将 HTML 文件与 Python 代码分离,保持应用结构清晰。在 Flask 中,模板文件默认存放在 templates 文件夹中。
[root@localhost ~]# mkdir templates ##创建存放模板文件的目录,注意:一定要与flask文件同级目录
[root@localhost templates]# cat greet.html
<html>
<head>
<meta charset="UTF=8">
<title>ni hao1</title>
</head><body>
<h1>hello,{{ name }}</h1>
</body></html>##修改flask.py文件为以下部分
[root@localhost templates]# vim /root/flask1.py
from flask import Flask,render_templateapp=Flask(__name__)@app.route('/')
def hello_world():##定义站点名称return render_template('greet.html')@app.route('/greet/<name>')
def greet(name):return render_template('greet.html',name=name)##render_template('greet.html',name=name):Flask会加载greet.html模板,并将name的值传递给模板,flask文件中的{{ name }}会被替换传入的值
验证,greet后面内容输入什么则会输出什么
三,模板继承与快
Flask 支持模板继承和块(Block)功能,这对于构建复杂页面非常有用。你可以在基础模板中定义通用的布局结构,在子模板中覆盖特定的部分。
1,定义基础模板base.html
[root@localhost templates]# cat base.html ##在templates中编辑base.html文件
<html>
<head>
<meta charset="UTF=8">
<title>
{% block title %}My website{% endblock %}</title>
</head><body>
<header>
<h1>欢迎来到我的网页</h1> ##此部分为访问时显示的内容
</header><div>
{% block content %}{% endblock %}
</div>
</body>
</html>from flask import Flask,render_templateapp=Flask(__name__)@app.route('/')
def hello_world():##定义站点名称return render_template('base.html') ##只需将render_template()括号中的部分改为base。html即可访问
验证
2,定义子模板indes.html
[root@localhost templates]# cat index.html
{% extends 'base.html' %}{% block title %}zhangsan{% endblock %}{% block content %}<h1>ni hao lisi</h1>{% endblock %}##{% extends'base.htm1'%}:子模板继承了 base.html 模板
##{% block title %}Home{% endblock %}:覆盖父模板中的 title 块。
##{% block content %}:定义页面的主要内容区域。
##<h1>ni hao lisi</h1>:<h1></h1>中间的内容为显示到网页的内容
所谓的title快就是访问网页中以下部分的内容
验证:访问的时候基础模板的内容并不被替换掉
四,Flask表单处理与用户输入
pip3 install flask-wtf #安装处理表单工具
1,创建一个简单的表单
from flask import Flask, render_template, request
from flask_wtf import FlaskForm
from wtforms import StringField
from wtforms.validators import DataRequired ##from部分主要作用:导入必要的库和模块app = Flask(__name__)
app.secret_key = 's3cr3t' ##创建 Flask 应用实例并设置密钥class NameForm(FlaskForm): ##创建一个名为 NameForm 的表单类,包含一个名为 name 的文本字段name = StringField('Name', validators=[DataRequired()])@app.route('/', methods=['GET', 'POST']) ##路由处理 GET 和 POST 请求
def index():form = NameForm()if form.validate_on_submit():return f'Hello, {form.name.data}!'return render_template('index.html', form=form)if __name__ == '__main__':#app.run(debug=True) app.run(host='0.0.0.0', port=5000, debug=True) ##应用在本地服务器的 5000 端口运行
2,创建index.hmlt模块
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"> ##定义字符集为UTF-8,防止用户访问乱码<title>Flask Form</title>
</head>
<body><h1>Enter your name:</h1><form method="POST"> ##指定表单数据将通过 HTTP POST 方法提交{{ form.csrf_token }} ##生成 CSRF保护令牌<label for="name">Name:</label> {{ form.name() }}<br><br> ##渲染 WTForms 中定义的 name 字段<button type="submit">Submit</button></form>##Jinja2 模板语言的条件语句,如果用户提交了表单并且name字段并未空,则显示欢迎信息{% if form.name.data %} <h2>Hello, {{ form.name.data }}!</h2>{% endif %}
</body>
</html>
3,验证