Django 详解

Django 是一个高级的 Python Web 框架,用于快速开发安全且可维护的 Web 应用。它遵循 “Django for perfectionists with deadlines”(为有期限的完美主义者设计)的理念,提供了一套完整的工具包,帮助开发者快速构建 Web 应用。


1. Django 基础概念

1.1 什么是 Django?

Django 是一个基于 Python 的全栈 Web 框架,具备如下特点:

  • MVC 架构(在 Django 中称为 MTV)
  • 自带 Admin 后台
  • ORM(对象关系映射)
  • 强大的 URL 路由系统
  • 内置安全机制
  • 可扩展性强

1.2 MTV 架构(Model-Template-View)

Django 使用 MTV 模型,与传统的 MVC 模型类似,但有所区别。

  • Model(模型): 负责与数据库进行交互,定义数据的结构(如表、字段、关系)。
  • Template(模板): 负责前端页面的渲染,包含 HTML 和 Django 模板语言。
  • View(视图): 处理业务逻辑,接收请求,返回响应。

示意图:

Client <-> URLconf <-> View <-> Model <-> Database
                           |
                           v
                       Template

2. Django 项目结构

创建一个新的 Django 项目后,项目结构如下:

myproject/
├── manage.py           # 项目管理命令工具
├── myproject/
│   ├── __init__.py     # Python 包标识文件
│   ├── settings.py     # 项目配置文件
│   ├── urls.py         # URL 路由配置文件
│   ├── asgi.py         # 异步服务器网关接口
│   └── wsgi.py         # Web服务器网关接口
├── app1/               # Django 应用
│   ├── migrations/     # 数据库迁移文件
│   ├── admin.py        # Django Admin 配置
│   ├── apps.py         # 应用配置
│   ├── models.py       # 数据模型定义
│   ├── tests.py        # 测试代码
│   └── views.py        # 视图函数定义

3. Django 项目创建与运行

3.1 安装 Django

pip install django

3.2 创建 Django 项目

django-admin startproject myproject
cd myproject
python manage.py runserver

浏览器打开:http://127.0.0.1:8000

3.3 创建 Django 应用

python manage.py startapp app1

然后需要在 settings.py 中注册此应用:

# settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app1',  # 注册应用
]

4. 模型(Model)

4.1 定义一个模型

models.py 中定义一个简单的模型:

# app1/models.py
from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=50)
    published_date = models.DateField()
    isbn = models.CharField(max_length=13, unique=True)

    def __str__(self):
        return self.title

4.2 迁移数据库

python manage.py makemigrations
python manage.py migrate

4.3 在 Admin 后台注册模型

# app1/admin.py
from django.contrib import admin
from .models import Book

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'author', 'published_date')

启动 Admin 后台:

python manage.py createsuperuser
python manage.py runserver

访问 http://127.0.0.1:8000/admin


5. 视图(Views)

5.1 创建一个简单视图

# app1/views.py
from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, Django!")

5.2 URL 路由配置

# app1/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

5.3 项目 URL 配置

# myproject/urls.py
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('app1.urls')),
]

5.4 启动开发服务器

python manage.py runserver

访问 http://127.0.0.1:8000


6. 模板(Template)

6.1 使用模板渲染页面

创建 templates 目录和 index.html 文件:

app1/
├── templates/
│   └── index.html

index.html

DOCTYPE html>
<html>
<head>
    <title>Django Exampletitle>
head>
<body>
    <h1>Welcome to Django!h1>
    <p>{{ message }}p>
body>
html>

views.py

from django.shortcuts import render

def index(request):
    return render(request, 'index.html', {'message': 'Hello, Django Template!'})

7. Django ORM(对象关系映射)

7.1 查询所有记录

from app1.models import Book
books = Book.objects.all()

7.2 添加记录

book = Book.objects.create(
    title="Django 入门",
    author="张三",
    published_date="2023-01-01",
    isbn="1234567890123"
)

7.3 更新记录

book = Book.objects.get(id=1)
book.title = "Django 进阶"
book.save()

7.4 删除记录

book = Book.objects.get(id=1)
book.delete()

8. Django 表单与用户认证

8.1 表单示例

# forms.py
from django import forms

class BookForm(forms.Form):
    title = forms.CharField(max_length=100)
    author = forms.CharField(max_length=50)
    published_date = forms.DateField()

8.2 用户注册示例

from django.contrib.auth.forms import UserCreationForm
from django.shortcuts import render, redirect

def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('index')
    else:
        form = UserCreationForm()
    return render(request, 'register.html', {'form': form})

9. 部署 Django 项目

9.1 使用 Gunicorn 部署

pip install gunicorn
gunicorn myproject.wsgi

9.2 使用 Nginx 反向代理

配置一个简单的 Nginx 反向代理到 gunicorn


10. 总结

Django 是一个功能强大且开发高效的 Web 框架,适用于中小型以及大型 Web 项目开发。它自带了一整套解决方案,包括 Admin 后台、ORM、用户认证等功能。

你可能感兴趣的:(django,sqlite,数据库)