目录
[1. 创建项目](#1. 创建项目)
[2. 项目结构说明](#2. 项目结构说明)
[3. 启动开发服务器](#3. 启动开发服务器)
[1. 创建应用](#1. 创建应用)
[2. 定义模型(Model)](#2. 定义模型(Model))
[3. 创建视图(View)](#3. 创建视图(View))
[4. 配置URL(主路由)](#4. 配置URL(主路由))
[1. 创建子应用路由文件](#1. 创建子应用路由文件)
[2. 路由参数说明](#2. 路由参数说明)
[1. 创建模板目录结构](#1. 创建模板目录结构)
[2. 基础模板 base.html](#2. 基础模板 base.html)
[3. 文章列表模板 article_list.html](#3. 文章列表模板 article_list.html)
[4. 静态文件配置](#4. 静态文件配置)
[1. 创建数据库迁移文件](#1. 创建数据库迁移文件)
[2. 执行数据库迁移](#2. 执行数据库迁移)
[3. 创建超级用户](#3. 创建超级用户)
[4. 注册模型到管理员界面](#4. 注册模型到管理员界面)
一、Django简介
Django是一个基于Python的高级Web框架,它遵循MVC(Model-View-Controller)设计模式,旨在帮助开发者快速构建复杂、可扩展的Web应用程序。Django以其"开箱即用"的特性闻名,提供了强大的ORM、自动管理界面、表单处理、用户认证等核心功能。
Django的主要特点:
-
完善的文档:拥有详细的中英文文档
-
强大的ORM:支持多种数据库后端
-
自动管理界面:根据模型自动生成后台管理界面
-
内置安全机制:防止SQL注入、CSRF等常见攻击
-
可扩展性:支持中间件、信号等扩展机制
二、安装Django
环境要求
-
Python 3.6或更高版本
-
pip(Python包管理器)
安装步骤
1.创建虚拟环境(推荐)
python
# 创建虚拟环境
python -m venv django_env
# 激活虚拟环境
# Windows
django_env\Scripts\activate
# Linux/Mac
source django_env/bin/activate
2.安装Django
python
pip install django
3.验证安装
python
python -m django --version
三、创建第一个Django项目
1. 创建项目
python
django-admin startproject myproject
cd myproject
2. 项目结构说明
python
myproject/
manage.py
myproject/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
3. 启动开发服务器
python
python manage.py runserver
访问 http://127.0.0.1:8000 即可看到Django欢迎页面。(终端弹窗)
四、Django基本语法和核心概念
1. 创建应用
python
python manage.py startapp myapp
2. 定义模型(Model)
在myapp/models.py中:
python
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.title
3. 创建视图(View)
在myapp/views.py中:
python
from django.shortcuts import render
from django.http import HttpResponse
from .models import Article
def home(request):
return HttpResponse("欢迎来到首页!")
def article_list(request):
articles = Article.objects.all()
return render(request, 'myapp/article_list.html', {'articles': articles})
def article_detail(request, article_id):
try:
article = Article.objects.get(id=article_id)
return render(request, 'myapp/article_detail.html', {'article': article})
except Article.DoesNotExist:
return HttpResponse("文章不存在")
4. 配置URL(主路由)
在myproject/urls.py中:
python
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('myapp.urls')), # 包含子应用的路由
]
注意:如果项目启动失败,检查setting.py里面的INSTALLED_APPS是否添加了你的子路由配置,若没有,就添加myapp.apps.MyappConfig。
五、子路由配置
1. 创建子应用路由文件
在myapp目录下创建urls.py:
python
from django.urls import path
from . import views
app_name = 'myapp'
urlpatterns = [
path('', views.home, name='home'),
path('articles/', views.article_list, name='article_list'),
path('articles/<int:article_id>/', views.article_detail, name='article_detail'),
]
2. 路由参数说明
-
path('articles/<int:article_id>/', ...):捕获URL中的整数参数 -
支持的类型:
str,int,slug,uuid,path -
若不需要传参,就直接path(访问的地址,具体的视图函数)
六、模板系统与静态文件
1. 创建模板目录结构
python
myapp/
templates/
myapp/
base.html
article_list.html
article_detail.html
static/
myapp/
css/
style.css
js/
script.js
images/
2. 基础模板 base.html
html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}我的博客{% endblock %}</title>
{% load static %}
<link rel="stylesheet" href="{% static 'myapp/css/style.css' %}">
</head>
<body>
<header>
<nav>
<a href="{% url 'myapp:home' %}">首页</a>
<a href="{% url 'myapp:article_list' %}">文章列表</a>
</nav>
</header>
<main>
{% block content %}
{% endblock %}
</main>
<footer>
<p>© 2024 我的博客</p>
</footer>
<script src="{% static 'myapp/js/script.js' %}"></script>
</body>
</html>
3. 文章列表模板 article_list.html
html
{% extends 'myapp/base.html' %}
{% block title %}文章列表 - 我的博客{% endblock %}
{% block content %}
<div class="container">
<h1>文章列表</h1>
{% if articles %}
<div class="article-list">
{% for article in articles %}
<div class="article-item">
<h2>
<a href="{% url 'myapp:article_detail' article.id %}">
{{ article.title }}
</a>
</h2>
<p class="meta">发布于: {{ article.created_at|date:"Y-m-d H:i" }}</p>
<p>{{ article.content|truncatewords:30 }}</p>
</div>
{% endfor %}
</div>
{% else %}
<p>暂无文章</p>
{% endif %}
</div>
{% endblock %}
4. 静态文件配置
在settings.py中:
python
import os
# 静态文件配置
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
# 生产环境静态文件收集目录
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
# 媒体文件配置
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
注意:除了子路由下的static静态资源文件夹不需要setting中配置,子路由中的其他文件夹以及全局中的其他文件夹都需要在setting里面配置
七、数据库迁移与管理员配置
1. 创建数据库迁移文件
python
python manage.py makemigrations
2. 执行数据库迁移
python
python manage.py migrate
3. 创建超级用户
python
python manage.py createsuperuser
4. 注册模型到管理员界面
在myapp/admin.py中:
python
from django.contrib import admin
from .models import Article
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ['title', 'created_at', 'updated_at']
list_filter = ['created_at']
search_fields = ['title', 'content']
date_hierarchy = 'created_at'
八、完整的settings.py配置示例
python
import os
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = 'your-secret-key-here'
DEBUG = True
ALLOWED_HOSTS = []
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp', # 你的应用
]
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 = 'myproject.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(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',
],
},
},
]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_TZ = True
九、常用命令总结
python
# 创建项目
django-admin startproject project_name
# 创建应用
python manage.py startapp app_name
# 数据库迁移
python manage.py makemigrations
python manage.py migrate
# 运行开发服务器
python manage.py runserver
# 创建超级用户
python manage.py createsuperuser
# 收集静态文件
python manage.py collectstatic