【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:

bash 复制代码
pip install flask
1.2 Flask 基本用法

示例:创建一个简单的 Flask 应用

python 复制代码
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 请求

python 复制代码
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 页面。

示例:渲染模板

python 复制代码
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 文件:

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:

bash 复制代码
pip install django
2.2 Django 项目结构

创建 Django 项目和应用:

bash 复制代码
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 中创建视图:

python 复制代码
from django.http import HttpResponse

def home(request):
    return HttpResponse('Hello, Django!')

myproject/urls.py 中配置路由:

python 复制代码
from django.contrib import admin
from django.urls import path
from myapp import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.home),
]

启动开发服务器:

bash 复制代码
python manage.py runserver

访问 http://127.0.0.1:8000/,将显示 Hello, Django!

2.4 Django 模板渲染

与 Flask 类似,Django 也支持模板渲染。首先在 myapp/templates/ 文件夹下创建一个 index.html 文件:

html 复制代码
<!DOCTYPE html>
<html>
<head>
    <title>Django 应用</title>
</head>
<body>
    <h1>Hello, {{ name }}!</h1>
</body>
</html>

myapp/views.py 中渲染模板:

python 复制代码
from django.shortcuts import render

def home(request):
    return render(request, 'index.html', {'name': 'Django'})
2.5 Django 数据库操作

Django 提供了强大的 ORM(对象关系映射)功能,可以轻松操作数据库。

示例:定义模型

myapp/models.py 中定义一个模型:

python 复制代码
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

示例:数据库迁移

运行以下命令将模型应用到数据库:

bash 复制代码
python manage.py makemigrations
python manage.py migrate

示例:在视图中查询数据库

python 复制代码
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 应用。根据项目需求选择合适的框架,可以极大提升开发效率。

相关推荐
Lupino9 分钟前
被 React “玩弄”的 24 小时:为了修一个不存在的 Bug,我给大模型送了顿火锅钱
前端·react.js
米丘15 分钟前
了解 Javascript 模块化,更好地掌握 Vite 、Webpack、Rollup 等打包工具
前端
Heo17 分钟前
深入 React19 Diff 算法
前端·javascript·面试
滕青山18 分钟前
个人所得税计算器 在线工具核心JS实现
前端·javascript·vue.js
小怪点点18 分钟前
手写promise
前端·promise
国思RDIF框架27 分钟前
RDIFramework.NET Web 敏捷开发框架 V6.3 发布 (.NET8+、Framework 双引擎)
前端
Mintopia28 分钟前
如何在有限的时间里,活出几倍的人生
前端
炫饭第一名29 分钟前
速通Canvas指北🦮——变形、渐变与阴影篇
前端·javascript·程序员
Neptune130 分钟前
让我带你迅速吃透React组件通信:从入门到精通(上篇)
前端·javascript
阿懂在掘金30 分钟前
Vue 表单避坑(一):为什么 v-model 绑定对象属性会偷偷修改父组件数据?
前端·vue.js