Django 是一个高级的 Python Web 框架,用于快速开发安全且可维护的 Web 应用。它遵循 “Django for perfectionists with deadlines”(为有期限的完美主义者设计)的理念,提供了一套完整的工具包,帮助开发者快速构建 Web 应用。
Django 是一个基于 Python 的全栈 Web 框架,具备如下特点:
Django 使用 MTV 模型,与传统的 MVC 模型类似,但有所区别。
示意图:
Client <-> URLconf <-> View <-> Model <-> Database
|
v
Template
创建一个新的 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 # 视图函数定义
pip install django
django-admin startproject myproject
cd myproject
python manage.py runserver
浏览器打开:http://127.0.0.1:8000
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', # 注册应用
]
在 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
python manage.py makemigrations
python manage.py migrate
# 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
# app1/views.py
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, Django!")
# app1/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
# myproject/urls.py
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('app1.urls')),
]
python manage.py runserver
访问 http://127.0.0.1:8000
创建 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!'})
from app1.models import Book
books = Book.objects.all()
book = Book.objects.create(
title="Django 入门",
author="张三",
published_date="2023-01-01",
isbn="1234567890123"
)
book = Book.objects.get(id=1)
book.title = "Django 进阶"
book.save()
book = Book.objects.get(id=1)
book.delete()
# 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()
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})
pip install gunicorn
gunicorn myproject.wsgi
配置一个简单的 Nginx 反向代理到 gunicorn
。
Django 是一个功能强大且开发高效的 Web 框架,适用于中小型以及大型 Web 项目开发。它自带了一整套解决方案,包括 Admin 后台、ORM、用户认证等功能。