Django入门教程:从安装到项目实战

目录

一、Django简介

Django的主要特点:

二、安装Django

环境要求

安装步骤

1.创建虚拟环境(推荐)

2.安装Django

3.验证安装

三、创建第一个Django项目

[1. 创建项目](#1. 创建项目)

[2. 项目结构说明](#2. 项目结构说明)

[3. 启动开发服务器](#3. 启动开发服务器)

四、Django基本语法和核心概念

[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. 注册模型到管理员界面)

八、完整的settings.py配置示例

九、常用命令总结


一、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>&copy; 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
相关推荐
九章-几秒前
国企国产化替代标杆实践:金仓数据库赋能贵州磷化EMS系统自主可控升级
数据库·mysql·安全
利刃大大3 分钟前
【Mybatis】Mybatis入门 && 基础操作 && XML配置文件开发 && 多表查询 && 注入问题 && 数据库连接池
xml·数据库·mybatis
老华带你飞13 分钟前
志愿者服务管理|基于springboot 志愿者服务管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·spring
William_cl1 小时前
【CSDN 精品专栏】ASP.NET Razor 变量输出 @变量名:从入门到避坑,新手也能写对!
java·数据库·asp.net
困死了11111 小时前
PostgreSQL笔记
数据库·笔记·postgresql
尤物程序猿1 小时前
spring的监听器的几种使用方式
java·数据库·spring
老华带你飞1 小时前
学生请假管理|基于springboot 学生请假管理系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·后端·spring
一 乐2 小时前
校务管理|基于springboot + vueOA校务管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·spring
太行山有西瓜汁3 小时前
达梦DTS工具:批量导出与导入DDL脚本完整指南
运维·服务器·数据库
无盐海3 小时前
Redis 哨兵模式
数据库·redis·缓存