第1章:初见Django
1.3 第一个Django项目
创建项目:django-admin startproject
确保虚拟环境已激活,然后创建你的第一个Django项目。
基本项目创建
bash
# 创建名为 mysite 的Django项目
django-admin startproject mysite
# 进入项目目录
cd mysite
# 查看项目结构
tree mysite # Windows/Linux
# 或
ls -la # 查看文件列表项目创建最佳实践
推荐的项目创建方式,避免嵌套目录:
bash
# 在当前目录创建项目(注意最后的点)
django-admin startproject mysite
# 或者指定项目目录
mkdir my_django_project
cd my_django_project
django-admin startproject mysite项目结构解析
创建项目后,你会看到以下目录结构:
mysite/
├── manage.py
└── mysite/
├── __init__.py
├── settings.py
├── urls.py
├── wsgi.py
└── asgi.py让我们详细了解每个文件的作用:
manage.py
项目管理脚本,用于执行各种Django命令。 常用的manage.py命令:
bash
python manage.py runserver # 启动开发服务器
python manage.py migrate # 执行数据库迁移
python manage.py createsuperuser # 创建超级用户
python manage.py shell # 启动Django shell
python manage.py collectstatic # 收集静态文件mysite/__init__.py
空文件,告诉Python这是一个包目录。在Django 5.x中通常保持为空。
mysite/settings.py
项目的核心配置文件:
python
from pathlib import Path
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-your-secret-key-here'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'mysite.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'mysite.wsgi.application'
# Database
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
# Password validation
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
# Internationalization
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
STATIC_URL = 'static/'
# Default primary key field type
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'主要配置项说明:
- SECRET_KEY:用于加密的密钥,生产环境必须保密
- DEBUG:调试模式,生产环境必须设为False
- ALLOWED_HOSTS:允许访问的主机列表
- INSTALLED_APPS:已安装的应用列表
- DATABASES:数据库配置
- LANGUAGE_CODE:语言设置
- TIME_ZONE:时区设置
mysite/urls.py
主URL配置文件:
python
"""
URL configuration for mysite project.
"""
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]mysite/wsgi.py
WSGI(Web Server Gateway Interface)配置,用于部署:
python
"""
WSGI config for mysite project.
"""
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
application = get_wsgi_application()mysite/asgi.py
ASGI(Asynchronous Server Gateway Interface)配置,支持异步和WebSocket:
python
"""
ASGI config for mysite project.
"""
import os
from django.core.asgi import get_asgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
application = get_asgi_application()运行开发服务器
启动服务器
bash
# 启动开发服务器(默认端口8000)
python manage.py runserver
# Starting development server at http://127.0.0.1:8000/
# Quit the server with CONTROL-C.自定义端口和IP
bash
# 指定端口
python manage.py runserver 8080
# 指定IP和端口
python manage.py runserver 0.0.0.0:8000
# 只监听本地回环地址
python manage.py runserver 127.0.0.1:8000访问网站
打开浏览器,访问 http://127.0.0.1:8000/,你会看到Django的欢迎页面:
The install worked successfully! Congratulations!
You are seeing this message because this Django installation is working correctly.Hello World 示例
让我们创建一个简单的"Hello World"页面。
1. 创建视图函数
在 mysite/mysite/ 目录下创建 views.py 文件:
python
# mysite/views.py
from django.http import HttpResponse
from django.shortcuts import render
import datetime
def hello_world(request):
"""简单的Hello World视图"""
return HttpResponse("Hello, World! 欢迎来到Django世界!")
def hello_time(request):
"""显示当前时间的视图"""
now = datetime.datetime.now()
html = f"""
<html>
<head>
<title>Django Hello World</title>
<style>
body {{ font-family: Arial, sans-serif; text-align: center; margin-top: 100px; }}
h1 {{ color: #0c4b33; }}
p {{ color: #666; font-size: 18px; }}
</style>
</head>
<body>
<h1>Hello, Django World!</h1>
<p>当前时间:{now.strftime('%Y-%m-%d %H:%M:%S')}</p>
<p>这是你的第一个Django页面!</p>
</body>
</html>
"""
return HttpResponse(html)
def hello_user(request):
"""个性化问候视图"""
user_name = request.GET.get('name', '访客')
return HttpResponse(f"<h1>Hello, {user_name}!</h1><p>欢迎使用Django!</p>")2. 配置URL路由
修改 mysite/urls.py 文件:
python
# mysite/urls.py
from django.contrib import admin
from django.urls import path
from . import views # 导入我们创建的视图
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.hello_world, name='hello_world'), # 首页
path('time/', views.hello_time, name='hello_time'), # 时间页面
path('user/', views.hello_user, name='hello_user'), # 用户页面
]3. 测试页面
重新启动开发服务器(如果已经在运行,它会自动重载):
bash
python manage.py runserver访问以下URL测试:
http://127.0.0.1:8000/- Hello World页面http://127.0.0.1:8000/time/- 显示当前时间http://127.0.0.1:8000/user/?name=张三- 个性化问候
4. 使用模板(进阶示例)
创建模板目录和文件:
bash
# 在项目根目录创建模板目录
mkdir templates在 templates/ 目录下创建 hello.html:
html
<!-- templates/hello.html -->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Django Hello World</title>
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
text-align: center;
padding: 50px;
margin: 0;
}
.container {
background: rgba(255, 255, 255, 0.1);
border-radius: 15px;
padding: 40px;
max-width: 600px;
margin: 0 auto;
backdrop-filter: blur(10px);
}
h1 {
font-size: 3em;
margin-bottom: 20px;
text-shadow: 2px 2px 4px rgba(0,0,0,0.3);
}
p {
font-size: 1.2em;
line-height: 1.6;
}
.highlight {
color: #ffd700;
font-weight: bold;
}
</style>
</head>
<body>
<div class="container">
<h1>🎉 Hello, Django World!</h1>
<p>欢迎来到 <span class="highlight">Django 5.x</span> 的世界!</p>
<p>当前时间:<span class="highlight">{{ current_time }}</span></p>
<p>你好,<span class="highlight">{{ user_name }}</span>!</p>
<p>这是使用Django模板系统创建的页面。</p>
</div>
</body>
</html>更新 settings.py,配置模板路径:
python
# 在 settings.py 中找到 TEMPLATES 配置,修改 DIRS
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'templates'], # 添加模板目录
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]添加使用模板的视图:
python
# 在 mysite/views.py 中添加
def hello_template(request):
"""使用模板的视图"""
context = {
'current_time': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
'user_name': request.GET.get('name', '朋友'),
}
return render(request, 'hello.html', context)更新URL配置:
python
# 在 mysite/urls.py 中添加
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.hello_world, name='hello_world'),
path('time/', views.hello_time, name='hello_time'),
path('user/', views.hello_user, name='hello_user'),
path('template/', views.hello_template, name='hello_template'), # 新增
]访问 http://127.0.0.1:8000/template/?name=Django学习者 查看效果。
项目管理命令
常用管理命令
bash
# 检查项目配置
python manage.py check
# 查看所有可用命令
python manage.py help
# 查看特定命令的帮助
python manage.py help runserver
# 启动Django shell
python manage.py shell
# 收集静态文件
python manage.py collectstatic
# 创建数据库迁移
python manage.py makemigrations
# 执行数据库迁移
python manage.py migrate在Django shell中测试
bash
python manage.py shell在shell中:
python
# 导入Django设置
from django.conf import settings
print(settings.SECRET_KEY)
# 测试视图
from django.test import Client
client = Client()
response = client.get('/')
print(response.status_code)
print(response.content)
# 查看URL配置
from django.urls import reverse
print(reverse('hello_world'))项目配置优化
中文本地化设置
修改 settings.py:
python
# 语言设置
LANGUAGE_CODE = 'zh-hans' # 简体中文
# 时区设置
TIME_ZONE = 'Asia/Shanghai' # 中国时区
# 国际化
USE_I18N = True
USE_TZ = True开发环境优化
在 settings.py 中添加:
python
# 开发环境配置
if DEBUG:
# 允许所有主机(仅开发环境)
ALLOWED_HOSTS = ['*']
# 添加调试工具栏(需要单独安装)
# pip install django-debug-toolbar
# INSTALLED_APPS += ['debug_toolbar']
# MIDDLEWARE += ['debug_toolbar.middleware.DebugToolbarMiddleware']小结
恭喜!你已经成功创建并运行了第一个Django项目。在这一节中,你学会了:
- ✅ 使用
django-admin startproject创建项目 - ✅ 理解Django项目的目录结构
- ✅ 启动开发服务器
- ✅ 创建简单的视图和URL配置
- ✅ 使用模板系统创建动态页面
- ✅ 基本的项目配置和优化
关键概念回顾:
- 项目(Project):整个Web应用
- 视图(View):处理请求并返回响应的函数
- URL配置:将URL路径映射到视图函数
- 模板(Template):用于生成HTML的文件
下一篇
我们将深入学习Django的核心概念:MTV架构模式,以及如何创建和管理Django应用(App)。