Django学习二

Django2

常见Django django-admin 命令详解

1. 创建新项目

django-admin startproject 项目名称

这个命令会在当前目录下创建一个新的 Django 项目,包含基本的项目结构:

  • manage.py:项目管理脚本
  • 项目名称/:项目主目录
    • __init__.py
    • settings.py:项目设置文件
    • urls.py:URL 路由配置
    • wsgi.py:WSGI 应用入口

2.创建新应用

django-admin startapp 应用名称

这会创建一个新的 Django 应用,包含:

  • migrations/:数据库迁移文件目录
  • __init__.py
  • admin.py:管理后台配置
  • apps.py:应用配置
  • models.py:数据模型定义
  • tests.py:测试代码
  • views.py:视图函数

3. 检查项目配置

title
django-admin check

这个命令会检查你的 Django 项目是否有配置错误,包括:

  • 模型定义是否正确
  • URL 配置是否有效
  • 模板设置是否正确
  • 静态文件配置等

4. 数据库迁移

django-admin makemigrations  # 创建迁移文件
django-admin migrate        # 应用迁移到数据库

5. 创建超级用户

django-admin createsuperuser

6.其他常用命令

命令 作用 示例
`shell` 进入 Django Shell(带 ORM 支持) `python manage.py shell`
`test` 运行测试用例 `python manage.py test blog`
`collectstatic` 收集静态文件(生产环境部署) `python manage.py collectstatic`

Django 项目结构解析

文件/目录 详细说明
**manage.py**​ Django 项目的命令行管理工具,封装了`django-admin`的功能,并自动设置`DJANGO_SETTINGS_MODULE`环境变量指向当前项目的配置。所有项目管理命令都通过它执行,如: -`runserver`:启动开发服务器 -`makemigrations`:生成数据库迁移文件 -`shell`:启动带 ORM 的 Python shell
**db.sqlite3**​ Django 默认使用的 SQLite 数据库文件,在首次执行`migrate`命令后自动生成。开发环境适用,生产环境建议换用 PostgreSQL/MySQL。文件位置由`settings.py`中的`DATABASES[‘default’][‘NAME’]`定义。
**__pycache__/**​ Python 解释器生成的字节码缓存目录,包含`.pyc`文件,用于加速模块加载。无需提交到版本控制(应在`.gitignore`中忽略)。

核心文件解析

manage.py

manage.py是 Django 项目的命令行工具入口,它提供了许多有用的命令:

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
    try:
        from django.core.management import execute_from_command_line
    except ImportError:
        # 处理导入错误
        pass
    execute_from_command_line(sys.argv)

常用命令示例:

  • python manage.py runserver- 启动开发服务器
  • python manage.py migrate- 应用数据库迁移
  • python manage.py createsuperuser- 创建管理员账户

settings.py

settings.py是 Django 项目的配置文件,包含所有重要的设置:

# 关键配置项详解:
DEBUG = True  # 开发时设为True,显示详细错误;生产环境必须改为False
ALLOWED_HOSTS = []  # DEBUG=False时需指定允许访问的域名(如['example.com'])

INSTALLED_APPS = [
    'django.contrib.admin',    # 后台管理
    'django.contrib.auth',     # 认证系统
    'django.contrib.contenttypes',  # 内容类型框架
    'django.contrib.sessions', # 会话管理
    'django.contrib.messages', # 消息框架
    'django.contrib.staticfiles',  # 静态文件管理
    # 可添加自定义应用:'myapp.apps.MyAppConfig'
]

DATABASES = {  # 数据库配置
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',  # 使用 pathlib 语法
        # MySQL示例:
        # 'ENGINE': 'django.db.backends.mysql',
        # 'NAME': 'mydb',
        # 'USER': 'root',
        # 'PASSWORD': 'password',
    }
}

STATIC_URL = '/static/'  # 静态文件URL前缀
STATICFILES_DIRS = [BASE_DIR / 'static']  # 开发时静态文件搜索目录
MEDIA_URL = '/media/'   # 用户上传文件URL前缀
MEDIA_ROOT = BASE_DIR / 'media'  # 上传文件存储路径

urls.py(URL 调度中心)

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),  # 后台路由
    path('blog/', include('blog.urls')),  # 子应用路由分发
    # path('api/', include('api.urls', namespace='api')),
]
  • include():实现路由模块化,将不同应用的路由分离到各自的 urls.py。
  • namespace:用于反向解析 URL 时避免命名冲突。

wsgi.py & asgi.py

文件 用途
**wsgi.py**​ WSGI(Web Server Gateway Interface)配置,用于传统同步服务器(如 Gunicorn、uWSGI)。生产环境通过此文件启动项目。
**asgi.py**​ ASGI(Asynchronous Server Gateway Interface)配置,支持异步服务器(如 Daphne、Uvicorn)。用于 WebSocket 或异步视图。

扩展目录(非自动生成,但常用)

HelloWorld/
├── apps/               # 推荐:存放所有自定义应用
│   └── blog/          # 示例应用
├── static/             # 静态文件(CSS/JS/图片)
├── media/              # 用户上传文件
├── templates/          # 全局模板目录
└── requirements.txt    # 项目依赖列表

1. apps/ 目录(推荐结构)

将应用集中管理,避免散落在项目根目录。

需在 settings.py 中配置 Python 路径:

import sys
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))

2. 静态文件与媒体文件

  • static/:存放 CSS、JavaScript、图片等,通过 STATIC_URL 访问。
  • media/:用户上传的文件(如头像),通过 MEDIA_URL 访问。需配置服务器在开发时提供访问:
# urls.py(仅开发环境)
from django.conf import settings
from django.conf.urls.static import static

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Django 应用结构

在 Django 中,一个项目可以包含多个应用。使用python manage.py startapp myapp创建一个新应用后,会生成以下结构:

myapp/
│
├── migrations/
│   └── __init__.py
├── __init__.py
├── admin.py
├── apps.py
├── models.py
├── tests.py
└── views.py

主要应用文件

models.py

定义数据模型,与数据库表对应:

from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=100)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    description = models.TextField()
    
    def __str__(self):
        return self.name

views.py

处理业务逻辑,返回响应

from django.shortcuts import render
from .models import Product

def product_list(request):
    products = Product.objects.all()
    return render(request, 'myapp/product_list.html', {'products': products})

admin.py

配置 Django 管理后台:

from django.contrib import admin
from .models import Product

@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
    list_display = ('name', 'price')

完整目录示例

myproject/
│
├── manage.py
├── requirements.txt
├── static/
│   ├── css/
│   ├── js/
│   └── images/
├── media/
├── templates/
│   └── base.html
└── myproject/
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    ├── wsgi.py
    └── asgi.py
└── myapp1/
    ├── migrations/
    ├── templates/
    │   └── myapp1/
    ├── __init__.py
    ├── admin.py
    ├── apps.py
    ├── models.py
    ├── tests.py
    ├── urls.py
    └── views.py
└── myapp2/
    └── ... (类似结构)

重要目录说明

migrations 目录

存储数据库迁移文件,Django 使用这些文件来跟踪模型变更并同步到数据库。

static 目录

存放静态文件(CSS, JavaScript, 图片等),在部署时会收集到指定位置。

templates 目录

存放 HTML 模板文件,Django 使用模板语言动态生成页面。

media 目录

存储用户上传的文件,需要在 settings.py 中配置:

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')