前言:
零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、 计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学习学习和学业的先行者!
欢迎大家订阅专栏:零基础学Python:Python从0到100最新最全教程!
一、代码直接生成HTML
在Python Web开发中,我们可以直接使用Python代码来生成HTML。这种方式简单直接,但随着项目的复杂度增加,维护成本也会随之上升。
1.直接生成HTML的优势
- 简单直接:对于小型项目或原型开发,直接生成HTML可以快速实现功能。
- 完全控制:开发者可以完全控制HTML的生成过程,易于调试和修改。
2.直接生成HTML的劣势
- 维护困难:随着HTML内容的增加,代码的复杂度也会增加,维护变得困难。
- 缺乏灵活性:每次修改HTML结构都需要修改Python代码,不够灵活。
from django.http import HttpResponse
# 定义HTML模板
html_template = '''
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
table { width: 100%; border-collapse: collapse; }
th, td { padding: 8px; text-align: left; border-bottom: 1px solid #ddd; }
</style>
</head>
<body>
<table>
<tr>
<th>ID</th>
<th>姓名</th>
<th>电话号码</th>
<th>地址</th>
</tr>
{table_rows}
</table>
</body>
</html>
'''
def generate_table_rows(customers):
table_rows = ''
for customer in customers:
table_rows += f"<tr><td>{customer['id']}</td><td>{customer['name']}</td><td>{customer['phonenumber']}</td><td>{customer['address']}</td></tr>"
return table_rows
def listcustomers(request):
customers = [
{'id': 1, 'name': 'Alice', 'phonenumber': '1234567890', 'address': 'Wonderland'},
# 更多客户数据...
]
table_rows = generate_table_rows(customers)
return HttpResponse(html_template.format(table_rows=table_rows))
将其放在我们的sales/views
文件中:
我们用一个变量 html_template
存储html模板, 然后 代码中生成html 里面需要插入的表格记录的内容,这个内容是html片段,也就是 html 表格的每行 。
最后填入到 html_template
模板里面,就产生了完整的HTML 字符串。最后返回该 html 文档 字符串 即可。修改后,再次访问 http://127.0.0.1:8080/sales/customers/
二、使用模板引擎
随着项目的扩展,直接在Python代码中拼接HTML变得越来越复杂。这时,我们可以使用模板引擎来简化这个过程。
1.模板引擎的优势
- 代码分离:HTML模板与Python代码分离,易于维护。
- 灵活性高:模板可以重复使用,易于修改和扩展。
- 易于阅读:模板中的逻辑更清晰,易于理解和阅读。
2.模板引擎的劣势
- 学习曲线:需要学习模板引擎的语法和使用方法。
- 性能影响:模板渲染可能会对性能产生一定影响,尤其是在高并发场景下。
from django.shortcuts import render
from .models import Customer
def listcustomers(request):
customers = Customer.objects.values()
context = {'customers': customers}
return render(request, 'customers.html', context)
在customers.html
模板中:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- 样式省略,与上文相同 -->
</head>
<body>
<table>
<tr>
<th>ID</th>
<th>姓名</th>
<th>电话号码</th>
<th>地址</th>
</tr>
{% for customer in customers %}
<tr>
<td>{{ customer.id }}</td>
<td>{{ customer.name }}</td>
<td>{{ customer.phonenumber }}</td>
<td>{{ customer.address }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
对比 Python直接产生 HTML,大家可以发现,使用模板引擎的好处,就是产生HTML的代码更简单方便了。
因为我们可以直接把要生成的 HTML片段 写在 HTML模板 里面。
然后,只需要传入渲染模板所需要的参数就可以了,模板引擎会自动化帮我们生成的HTML
上面只是一种模板用法的简单演示。
三、前后端分离架构
随着Web应用的发展,前后端分离架构成为了一种趋势。这种架构允许前端开发者专注于用户界面和用户体验,而后端开发者则专注于业务逻辑和数据。
1.优势
- 解耦前后端开发:前后端开发者可以独立工作,提高开发效率。
- 统一数据接口:前后端通过RESTful API或GraphQL等接口进行通信,数据格式通常为JSON或XML。
- 提升性能:前端渲染可以减轻服务器的负担,提高响应速度。
假设我们有一个RESTful API端点/api/customers/
,后端返回JSON格式的数据:
from django.http import JsonResponse
from .models import Customer
def api_listcustomers(request):
customers = Customer.objects.values()
data = list(customers)
return JsonResponse(data, safe=False)
前端可以使用AJAX请求此API,并使用框架如React或Vue.js来渲染数据。
现在随着 浏览器中javascript 解释器性能的突飞猛进,以及一些前端模板库和框架的流行。很多架构师将 页面的html 内容生成 的任务放到前端。
这样 服务端就只负责提供数据
, 界面的构成全部在前端(浏览器前端或者手机前端)进行,称之为前端渲染。只是这个工作在前端执行, 使用前端的 框架库去完成,比如 Angular,React,Vue。
这样 界面完全交给前端开发人员去做, 后端开发只需要提供前端界面所需要的数据就行了。
前端 和 后端 之间的交互就完全是 业务数据了。这样需要 定义好 前端和后端 交互数据 的接口。