暑假的时候用flask框架写了一个个人博客,完全参照《Flask Web开发》这本书一步步完成的,不得不说光头大叔这本书写的非常好,用一个完整简单的项目详细的将flask框架基本功能和知识传输给读者。个人博客的代码已经托管在GitHub上面,放一下链接<a>https://github.com/RickyLin7/RL7-Blog</a>,很简单的一个flask项目只是完成了比较基本的功能,自己加了两三个无关紧要的功能罢了。基本功能篇也就到这了,但是实际开发中,要完成的功能肯定更多,所以近期打算用flask框架完成一个较为复杂的论坛系统,再把flask框架过一遍,顺便写笔记,希望以后求职能够有所用处,整个过程都是边做边写,实时记录。</br>《Flask Web开发》这本书中的项目前端和后台是结合起来做的,但是工作中前端和后台应该是分开的,所以我这次先做好了前端的模板,然后再一步步的把功能添加进去。</br>OK,先创建一个标准的flask项目目录树
接着把html文件中的静态文件路径用url_for( )函数的形式全都改掉,例如
<link rel="stylesheet" href="{{ url_for('static', filename='css/bootstrap.css') }}" type="text/css" />
<link rel="stylesheet" href="{{ url_for('static', filename='css/animate.css') }}" type="text/css" />
<link rel="stylesheet" href="{{ url_for('static', filename='css/font-awesome.min.css') }}" type="text/css" />
<link rel="stylesheet" href="{{ url_for('static', filename='css/simple-line-icons.css') }}" type="text/css" />
<link rel="stylesheet" href="{{ url_for('static', filename='css/font.css') }}" type="text/css" />
<link rel="stylesheet" href="{{ url_for('static', filename='css/app.css') }}" type="text/css" />
记得有img路径的话也要全改掉。因为在flask程序中有一个static路由,它会将静态文件的引用变成一个特殊的路由,即/static/<filename>(默认设置下,Flask在程序根目录中名为static的子目录中寻找静态文件)。
然后把前端模板中的静态文件全都拖进static文件夹中,将html文件拖进templates文件夹中。简单的准备工作完成后,就该把flask程序在自己的电脑上运行起来了,在app.py文件中写入代码
from flask import Flask
from flask import render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
if __name__=='__main__':
app.run(debug=True)
然后打开终端进入虚拟环境运行python app.py
OK,打开浏览器访问
localhost:5000
即可看见index.html了
在app.py中可以看到引用的一个函数render_template()
此函数为jinja2提供。这样,Flask在程序文件夹中的子文件夹中寻找模板。第一个参数是文件名,随后的参数都是键值对(name=name),表示模板中变量对应的真实值。下面顺便阅读下它的源码
def render_template(template_name, **context):
"""Renders a template from the template folder with the given
context.
:param template_name: the name of the template to be rendered
:param context: the variables that should be available in the
context of the template.
"""
current_app.update_template_context(context)
return current_app.jinja_env.get_template(template_name).render(context)
好了,GG,起始篇就写到这了,因为是起始篇所以多写点,以后可能只写难点,不过也看时间,时间多就尽量多写点。