跟着我们一起学 Python 30天课程-第25天-Web Development Extras

作者 : IT 大叔 本文共4461个字,预计阅读时间需要12分钟 发布时间: 2020-08-22

Flask应用程序的基本框架开始,今天我实现了一些基本功能,以完善我们的简单极简博客应用程序。首先使用Flask的模板继承模式,我重新使用了通用模板代码,然后添加了两个虚拟帖子以动态呈现它们。最后,生成一个requirements.txt文件以将所有程序包依赖项存储在一个文件中,然后可以使用该命令通过单个命令下载所有程序包。

模板继承

目前,index.htmlabout.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.htmlsecond-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应用程序的非常细小的用例。我想列出一些有用的参考资料以供进一步探索:

今天就这些。在本系列的其余部分中,我将简要探讨高级主题,例如机器学习和Python数据科学的基础知识。

跟着我们一起学 Python 30天课程目录:

  1.  跟着我们一起学 Python 30天课程-第30天-免费Python资源 
  2.  跟着我们一起学 Python 30天课程-第29天-自动化测试 
  3.  跟着我们一起学 Python 30天课程-第28天-ML和数据科学II 
  4.  跟着我们一起学 Python 30天课程-第27天-ML和数据科学I 
  5.  跟着我们一起学 Python 30天课程-第26天-机器学习基础 
  6.  跟着我们一起学 Python 30天课程-第25天-Web 开发进阶
  7.  跟着我们一起学 Python 30天课程-第24天-Web开发基础 
  8.  跟着我们一起学 Python 30天课程-第23天-网页爬虫 
  9.  跟着我们一起学 Python 30天课程-第22天-脚本额外功能Scripting Extras 
  10.  跟着我们一起学 Python 30天课程-第21天-脚本编写基础 
  11.  跟着我们一起学 Python 30天课程-第20天-调试和测试 
  12.  跟着我们一起学 Python 30天课程-第19天-正则表达式 
  13.  跟着我们一起学 Python 30天课程-第18天-文件I / O 
  14.  跟着我们一起学 Python 30天课程-第17天-外部模块External Modules 
  15.  跟着我们一起学 Python 30天课程-第16天-模块基础Module Basics 
  16.  跟着我们一起学 Python 30天课程-第15天-生成器Generators 
  17.  跟着我们一起学 Python 30天课程-第14天-错误处理Error Handling 
  18.  跟着我们一起学 Python 30天课程-第13天-Decorators 
  19.  跟着我们一起学 Python 30天课程-第12天-Lambda Expressions & Comprehensions 
  20.  跟着我们一起学 Python 30天课程-第11天-函数编程Functional Programming基础 
  21.  跟着我们一起学 Python 30天课程-第10天-OOP Missing Pieces 
  22.  跟着我们一起学 Python 30天课程-第9天-OOP Pillars 
  23.  跟着我们一起学 Python 30天课程-第8天-OOP基础知识 
  24.  跟着我们一起学 Python 30天课程-第7天-开发环境搭建(Developer Environment) 
  25.  跟着我们一起学 Python 30天课程-第6天-循环II和函数(Loops II & Functions) 
  26.  跟着我们一起学 Python 30天课程-第5天-条件和循环I(Conditions & Loops I) 
  27.  跟着我们一起学 Python 30天课程-第4天-数据类型III(Data Types III) 
  28.  跟着我们一起学 Python 30天课程-第3天-数据类型II(Data Types II) 
  29.  跟着我们一起学 Python 30天课程-第2天-数据类型I(Data Types I) 
  30.  跟着我们一起学 Python 30天课程-第1天-简介 
免责声明:
1. 本站资源转自互联网,源码资源分享仅供交流学习,下载后切勿用于商业用途,否则开发者追究责任与本站无关!
2. 本站使用「署名 4.0 国际」创作协议,可自由转载、引用,但需署名原版权作者且注明文章出处
3. 未登录无法下载,登录使用金币下载所有资源。
IT小站 » 跟着我们一起学 Python 30天课程-第25天-Web Development Extras

常见问题FAQ

没有金币/金币不足 怎么办?
本站已开通每日签到送金币,每日签到赠送五枚金币,金币可累积。
所有资源普通会员都能下载吗?
本站所有资源普通会员都可以下载,需要消耗金币下载的白金会员资源,通过每日签到,即可获取免费金币,金币可累积使用。

发表评论