大家好,又见面了,我是你们的朋友全栈君。
文章目录
- 前言
- Flask 基础概念和安装
- Flask 快速入门小应用
- Flask 之模板的使用
- 后续,待更新。。。。
前言
最近开始学习flask 框架,本文用于flask 框架的基础入门学习,版本使用的是py3.7,学习内容相对比较简单,后续再扩充高级知识。
Flask 基础概念和安装
首先我们得清楚,flask 具体是个什么东东?我们学了flask 有啥用?
这里给出维基百科的解释:Flask是一个使用Python编写的轻量级Web应用框架。基于Werkzeug WSGI工具箱和Jinja2 模板引擎
安装就不多说了,直接输入以下命令即可:
代码语言:javascript复制pip install flask
Flask 快速入门小应用
学东西,得先知道我们用这个东西,能做出来一个什么东西。 一个最小的基于flask 的应用可能看上去像下面这个样子:
代码语言:javascript复制from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run(0.0.0.0)
运行起来的效果就是这样的:
具体,这串代码什么意思? 首先,我们导入了Flask 这个类 然后编写了一个hello_world 函数,返回一个“Hello World”字符串 这也就是为啥我们能在网页上看到一串字符串的原因。 那么剩下的是什么?
代码语言:javascript复制@app.route('/')
这一串代码,官方解释为路由,其实就是告诉你当用户访问哪个路径的时候,调用下面装饰的这个函数。 所以上面那个小应用的代码,意思就是,当我访问根路径(‘/’)时执行hello_world函数。 当然,一个函数被多个路由装饰的时候,意味着你可以通过多个路径执行到该函数。
调用app的run方法即可启动服务,指定’0.0.0.0’,这会让操作系统监听所有公网 IP。
代码语言:javascript复制app.run(0.0.0.0)
再看看下面这个例子:
代码语言:javascript复制from flask import Flask
app = Flask(__name__)
@app.route('/')
@app.route('/index')
def hello_world():
return 'Hello World!'
@app.route('/login')
def login():
return 'Login Success!'
if __name__ == '__main__':
app.run(0.0.0.0)
EZ ~~
Flask 之模板的使用
经过上面的小应用,我们可以简单的利用flask生成一个小的网页,但是,这网页我想要加点样式怎么办? 一个最简单也是最懒的方法:就是让函数直接返回一串html代码 比如下面这个例子:
代码语言:javascript复制@app.route('/')
@app.route('/index')
def hello_world():
def index():
user = {'username': 'Cxiansheng'}
return '''
<html>
<head>
<title>Home Page - CSDN</title>
</head>
<body>
<h1>Hello, ''' user['username'] '''!</h1>
</body>
</html>'''
那么问题来了,我所有的函数都需要这串html代码怎么办?总不能所有的函数都返回一下这一段html代码吧。 这个时候,模板就派上用场了。 为了简化这些操作,Flask 配备了 Jinja2 模板引擎 我们把上面的html 代码装换成模板,命名为’index.html’:
代码语言:javascript复制<html>
<head>
<title>{
{ title }} - CSDN</title>
</head>
<body>
<h1>Hello, {
{ user.username }}!</h1>
</body>
</html>
然后就可以使用 render_template() 方法来渲染模板,传入必要的参数即可
代码语言:javascript复制@app.route('/')
@app.route('/index')
def hello_world():
user = {'username': '这是模板生成的'}
return render_template('index.html', title='Home', user=user)
偷懒成功,现在我们可以直接调用这个模板,而不需要手动返回html代码了。 突然一个念想: 那多个网页共有部分的html 代码可不可以也单独保存成一个模板? 例如CSDN的标题栏:
既然想偷懒,就继续偷懒下去吧。 我们可以利用模板继承的思想,去避免重复性的代码编写,例如:
我们利用上面的两个快速小应用,做一个标题栏,那么标题栏的html代码我们就可以做一个base.html用来给其他页面继承使用。 如何继承? 利用“{% extends ‘base.html’ %}”,即可继承base.html的代码 首先我们先看一下base.html的代码:
代码语言:javascript复制<html>
<head>
{% if title %}
<title>{
{ title }} - CSDN</title>
{% else %}
<title>welcome - CSDN</title>
{% endif %}
</head>
<body>
<div>
My Website:
<a href="{
{ url_for('index') }}">Home</a>
<a href="{
{ url_for('login') }}">Login</a>
</div>
<hr>
{% block content %}{% endblock %}
</body>
</html>
其中 {% block content %}{% endblock %}这两个标识,即标记继承过来的代码所占的坑,也就是说,如果index.html 代码继承了base.html代码,那么index.html代码将会被放置在 {% block content %}{% endblock %}这两个标识之间。
下面看看index.html代码
代码语言:javascript复制{% extends 'base.html' %}
{% block content %}
<h1>Hello {
{ user.username }}!</h1>
{% endblock %}
那么到了这个阶段,我们就可以利用flask框架 Jinja2模板创建我们自己的网页啦
后续,待更新。。。。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/176037.html原文链接:https://javaforall.cn