【30天玩转python】Web开发(Flask/Django)
Web开发(Flask/Django)
Python 在 Web 开发领域非常流行,拥有多个强大的 Web 框架,其中最受欢迎的两个是 Flask 和 Django。本篇文章将介绍 Flask 和 Django 的基本功能、区别,以及如何使用它们来快速构建 Web 应用。
1. Flask 简介
Flask 是一个轻量级的 Web 框架,设计简单易用,适合小型项目或对框架有更高自定义要求的开发者。Flask 以其灵活性和可扩展性著称,提供了基础的开发工具包,可以根据项目需求自由扩展。
1.1 安装 Flask
使用以下命令安装 Flask:
pip install flask
1.2 Flask 基本用法
示例:创建一个简单的 Flask 应用
from flask import Flask
app = Flask(__name__)
# 定义路由和视图函数
@app.route('/')
def hello_world():
return 'Hello, Flask!'
if __name__ == '__main__':
# 启动 Flask 应用
app.run(debug=True)
@app.route('/')
:定义了一个根路径的路由,当用户访问该路径时,将执行hello_world()
函数。app.run()
:启动服务器,debug=True
表示启用调试模式。
1.3 Flask 中的请求与响应
Flask 提供了处理 HTTP 请求和响应的便捷方式。
示例:处理 GET 和 POST 请求
from flask import Flask, request
app = Flask(__name__)
# 处理 GET 和 POST 请求
@app.route('/submit', methods=['GET', 'POST'])
def submit():
if request.method == 'POST':
data = request.form['data']
return f'POST 数据: {data}'
return 'GET 请求'
if __name__ == '__main__':
app.run(debug=True)
request.form
:用于处理 POST 请求中的表单数据。methods=['GET', 'POST']
:指定该路由可以接受 GET 和 POST 请求。
1.4 模板渲染
Flask 支持 Jinja2 模板引擎,可以动态渲染 HTML 页面。
示例:渲染模板
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def home():
return render_template('index.html', name='Flask')
if __name__ == '__main__':
app.run(debug=True)
在 templates/
文件夹下创建一个 index.html
文件:
<!DOCTYPE html>
<html>
<head>
<title>Flask 应用</title>
</head>
<body>
<h1>Hello, {{ name }}!</h1>
</body>
</html>
2. Django 简介
Django 是一个功能完备的 Web 框架,适合大型项目开发,提供了许多内置功能,如用户认证、ORM、后台管理等。Django 的理念是 “不重复造轮子”(Don’t Repeat Yourself, DRY),它能够快速开发出具有完善功能的 Web 应用。
2.1 安装 Django
使用以下命令安装 Django:
pip install django
2.2 Django 项目结构
创建 Django 项目和应用:
django-admin startproject myproject
cd myproject
python manage.py startapp myapp
Django 项目目录结构如下:
myproject/
manage.py
myproject/
__init__.py
settings.py
urls.py
wsgi.py
myapp/
migrations/
__init__.py
admin.py
apps.py
models.py
views.py
urls.py
myproject/
:项目的主目录,包含项目配置文件。myapp/
:创建的应用,包含视图、模型等文件。
2.3 Django 基本用法
示例:创建视图和路由
在 myapp/views.py
中创建视图:
from django.http import HttpResponse
def home(request):
return HttpResponse('Hello, Django!')
在 myproject/urls.py
中配置路由:
from django.contrib import admin
from django.urls import path
from myapp import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.home),
]
启动开发服务器:
python manage.py runserver
访问 http://127.0.0.1:8000/
,将显示 Hello, Django!
。
2.4 Django 模板渲染
与 Flask 类似,Django 也支持模板渲染。首先在 myapp/templates/
文件夹下创建一个 index.html
文件:
<!DOCTYPE html>
<html>
<head>
<title>Django 应用</title>
</head>
<body>
<h1>Hello, {{ name }}!</h1>
</body>
</html>
在 myapp/views.py
中渲染模板:
from django.shortcuts import render
def home(request):
return render(request, 'index.html', {'name': 'Django'})
2.5 Django 数据库操作
Django 提供了强大的 ORM(对象关系映射)功能,可以轻松操作数据库。
示例:定义模型
在 myapp/models.py
中定义一个模型:
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
published = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
示例:数据库迁移
运行以下命令将模型应用到数据库:
python manage.py makemigrations
python manage.py migrate
示例:在视图中查询数据库
from django.shortcuts import render
from .models import Article
def article_list(request):
articles = Article.objects.all()
return render(request, 'articles.html', {'articles': articles})
3. Flask 与 Django 的区别
特性 | Flask | Django |
---|---|---|
架构风格 | 轻量、微框架 | 全功能、“电池齐全” |
适用场景 | 小型项目、自定义需求较多的项目 | 大型项目、快速开发 |
灵活性 | 高,自由度大 | 较低,内置功能多 |
学习曲线 | 平缓,入门简单 | 较陡,配置较多 |
扩展性 | 依赖于第三方扩展库 | 内置多种功能,扩展性好 |
4. 小结
Flask 和 Django 各有千秋:Flask 适合小型、灵活的项目,Django 则适合快速开发大型 Web 应用。根据项目需求选择合适的框架,可以极大提升开发效率。