跟着我们一起学 Python 30天课程-第25天-Web Development Extras
从Flask应用程序的基本框架开始,今天我实现了一些基本功能,以完善我们的简单极简博客应用程序。首先使用Flask的模板继承模式,我重新使用了通用模板代码,然后添加了两个虚拟帖子以动态呈现它们。最后,生成一个requirements.txt
文件以将所有程序包依赖项存储在一个文件中,然后可以使用该命令通过单个命令下载所有程序包。
模板继承
目前,index.html
,about.html
模板包含重复的HTML代码。由于Flask使用Jinja作为模板引擎,因此我们可以使用强大的模板继承概念来创建基本模板文件,该文件将包含所有常见的HTML代码,例如HTML骨架,导航栏,页脚等。其他模板随后可以扩展此基本模板因此使我们的模板代码更具可重用性。我创建了一个基本模板文件layout.html
来包含通用模板结构,如下所示。
layout.html
{% extends "layout.html" %}
{% block title %}Index{% endblock %}
{% block head %}
{{ super() }}
<style type="text/css">
.important { color: #336699; }
</style>
{% endblock %}
{% block content %}
<h1>About</h1>
<p class="important">
Hi. I am Arindam. I love building User Interfaces. I am currently learning
Python and created this simple blog using the Flask web development
framework.
{% endblock %}
可以创建模板可重复使用的块,并将该块的代码放置在内{% block block_name %}
{% endblock %}
。{% block %}
通知模板引擎子模板可以覆盖模板的这些部分。
然后,其他文件可以像这样继承此基本模板:
about.html
{% extends "layout.html" %}
{% block title %}Index{% endblock %}
{% block head %}
{{ super() }}
<style type="text/css">
.important { color: #336699; }
</style>
{% endblock %}
{% block content %}
<h1>About</h1>
<p class="important">
Hi. I am Arindam. I love building User Interfaces. I am currently learning
Python and created this simple blog using the Flask web development
framework.
{% endblock %}
此处super()
用于呈现父模板中定义的块的内容。
有关使用Flask进行模板制作的更多信息,请参见https://flask.palletsprojects.com/en/1.1.x/patterns/templateinheritance/
创建找不到页面的提示
在Flask中,我们可以处理从服务器加载内容时可能发生的各种异常,例如在找不到路由时显示自定义404页面,在服务器内部发生500个错误时显示自定义页面等。我创建了一个简单的not_found.html
文件找不到路线时将呈现。
not_found.html
{% extends 'layout.html' %}
{% block title %}Page Not Found{% endblock %}
{% block content %}
<h1>Page Not Found</h1>
<p class="important">
Sorry, this page does not exist!
{% endblock %}
server.py
@app.errorhandler(404)
def page_not_found(error):
return render_template('not_found.html'), 404
有关Flask错误处理的更多信息,请参见https://flask.palletsprojects.com/en/1.1.x/patterns/errorpages/
添加样本帖子
为简单起见,我在模板目录中创建了一个posts文件夹,并创建了两个虚拟的post文件first-post.html
和second-post.html
。然后,我创建了一个[posts.py](http://posts.py)
文件来读取所有帖子文件,并将文件名存储在可以在主页中呈现的列表中。
posts.py
import os
def get_all_post_names():
try:
post_files = os.listdir('templates/posts')
post_names = list(map(lambda x: x.split('.')[0], post_files))
return post_names
except:
print('An error occurred while fetching posts')
return []
{% extends "layout.html" %}
{% block title %}Index{% endblock %}
{% block head%}
{{ super() }}
{% endblock %}
{% block content %}
<h1 class="title">
Welcome to the Python Blog.
</h1>
<h2>Recent Posts</h2>
<ul class="post-list">
{% for post in post_names %}
<li><a href="posts/{{post}}.html">{{post}}</a></li>
{% endfor %}
</ul>
{% endblock %}
{% %}
根据Jinja模板语法,所有此类Python语句均写在块内。动态值放置在{{ }}
。现在,我们应该可以在主页上看到两个帖子。现在单击帖子,它将打开相应的帖子页面。为此,我们必须创建一个动态处理帖子页面的路由。
@app.route('/posts/<string:post_name>')
def show_post(post_name):
return render_template(f'posts/{post_name}.html')
该路由将处理页面名称并动态呈现各个帖子页面。
生成require.txt文件
在我们的Python项目中,我们可以使用几个外部包。如果我们想与某人共享此项目,则需要共享所有项目文件,并提及运行该项目所需的所有软件包以及正确的版本号。这不是一种实际的方法。
requirements.txt
使用此命令,可以将项目中使用的所有已安装依赖项及其版本一起列出在一个文件中(按照约定)。
$ pip freeze > requirements.txt
这requirements.txt
将为项目生成文件。该文件可以上传到任何GIT存储库。当有人下载项目时,他们只需要运行pip install -r requirement.txt
,所有与项目相关的依赖项将自动安装为具有确切的版本。
完整的项目代码可以在这里找到
参考文献
上面的项目是使用Python创建Web应用程序的非常细小的用例。我想列出一些有用的参考资料以供进一步探索:
- edX上的一本很棒的Python Web开发课程
- 使用Flask构建REST API
- 使用Django的REST API
- https://programminghistorian.org/en/lessons/creating-apis-with-python-and-flask
- 将Flask与Angular结合使用
- 将Flask与React结合使用
- Django和Angular应用
今天就这些。在本系列的其余部分中,我将简要探讨高级主题,例如机器学习和Python数据科学的基础知识。
跟着我们一起学 Python 30天课程目录:
- 跟着我们一起学 Python 30天课程-第30天-免费Python资源
- 跟着我们一起学 Python 30天课程-第29天-自动化测试
- 跟着我们一起学 Python 30天课程-第28天-ML和数据科学II
- 跟着我们一起学 Python 30天课程-第27天-ML和数据科学I
- 跟着我们一起学 Python 30天课程-第26天-机器学习基础
- 跟着我们一起学 Python 30天课程-第25天-Web 开发进阶
- 跟着我们一起学 Python 30天课程-第24天-Web开发基础
- 跟着我们一起学 Python 30天课程-第23天-网页爬虫
- 跟着我们一起学 Python 30天课程-第22天-脚本额外功能Scripting Extras
- 跟着我们一起学 Python 30天课程-第21天-脚本编写基础
- 跟着我们一起学 Python 30天课程-第20天-调试和测试
- 跟着我们一起学 Python 30天课程-第19天-正则表达式
- 跟着我们一起学 Python 30天课程-第18天-文件I / O
- 跟着我们一起学 Python 30天课程-第17天-外部模块External Modules
- 跟着我们一起学 Python 30天课程-第16天-模块基础Module Basics
- 跟着我们一起学 Python 30天课程-第15天-生成器Generators
- 跟着我们一起学 Python 30天课程-第14天-错误处理Error Handling
- 跟着我们一起学 Python 30天课程-第13天-Decorators
- 跟着我们一起学 Python 30天课程-第12天-Lambda Expressions & Comprehensions
- 跟着我们一起学 Python 30天课程-第11天-函数编程Functional Programming基础
- 跟着我们一起学 Python 30天课程-第10天-OOP Missing Pieces
- 跟着我们一起学 Python 30天课程-第9天-OOP Pillars
- 跟着我们一起学 Python 30天课程-第8天-OOP基础知识
- 跟着我们一起学 Python 30天课程-第7天-开发环境搭建(Developer Environment)
- 跟着我们一起学 Python 30天课程-第6天-循环II和函数(Loops II & Functions)
- 跟着我们一起学 Python 30天课程-第5天-条件和循环I(Conditions & Loops I)
- 跟着我们一起学 Python 30天课程-第4天-数据类型III(Data Types III)
- 跟着我们一起学 Python 30天课程-第3天-数据类型II(Data Types II)
- 跟着我们一起学 Python 30天课程-第2天-数据类型I(Data Types I)
- 跟着我们一起学 Python 30天课程-第1天-简介
1. 本站资源转自互联网,源码资源分享仅供交流学习,下载后切勿用于商业用途,否则开发者追究责任与本站无关!
2. 本站使用「署名 4.0 国际」创作协议,可自由转载、引用,但需署名原版权作者且注明文章出处
3. 未登录无法下载,登录使用金币下载所有资源。
IT小站 » 跟着我们一起学 Python 30天课程-第25天-Web Development Extras
常见问题FAQ
- 没有金币/金币不足 怎么办?
- 本站已开通每日签到送金币,每日签到赠送五枚金币,金币可累积。
- 所有资源普通会员都能下载吗?
- 本站所有资源普通会员都可以下载,需要消耗金币下载的白金会员资源,通过每日签到,即可获取免费金币,金币可累积使用。