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

相关推荐
WANGWUSAN668 分钟前
Python高频写法总结!
java·linux·开发语言·数据库·经验分享·python·编程
高山我梦口香糖11 分钟前
[react] <NavLink>自带激活属性
前端·javascript·react.js
撸码到无法自拔15 分钟前
React:组件、状态与事件处理的完整指南
前端·javascript·react.js·前端框架·ecmascript
高山我梦口香糖16 分钟前
[react]不能将类型“string | undefined”分配给类型“To”。 不能将类型“undefined”分配给类型“To”
前端·javascript·react.js
代码cv移动工程师19 分钟前
HTML语法规范
前端·html
40岁的系统架构师25 分钟前
1 JVM JDK JRE之间的区别以及使用字节码的好处
java·jvm·python
Elena_Lucky_baby42 分钟前
实现路由懒加载的方式有哪些?
前端·javascript·vue.js
Domain-zhuo42 分钟前
如何利用webpack来优化前端性能?
前端·webpack·前端框架·node.js·ecmascript
理想不理想v1 小时前
webpack如何自定义插件?示例
前端·webpack·node.js
小华同学ai1 小时前
ShowDoc:Star12.3k,福利项目,个人小团队的在线文档“简单、易用、轻量化”还专门针对API文档、技术文档做了优化
前端·程序员·github