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
相关推荐
摘星编程2 小时前
openGauss DataVec向量数据库集成:面向AI应用的相似性搜索与知识图谱存储
数据库·人工智能·知识图谱
27669582922 小时前
最新 _rand 分析
前端·javascript·数据库·node·rand·231滑块·_rand分析
一 乐2 小时前
宠物医院预约|宠物医院|基于SprinBoot+vue的宠物医院预约管理系统源码+数据库+文档)
java·前端·数据库·vue.js·后端·springboot
蟹至之2 小时前
【MySQL】视图
数据库·mysql·视图
Fuly10242 小时前
langchain基础教程(6)---构建知识库--①向量数据库-chromadb
数据库·langchain
橘子编程2 小时前
仓颉语言:华为新一代编程利器
java·c语言·开发语言·数据库·python·青少年编程
i***39582 小时前
开放自己本机的mysql允许别人连接
数据库·mysql·adb
n***F8752 小时前
【MySQL】视图
数据库·mysql·oracle
p***93032 小时前
使用Django Rest Framework构建API
数据库·django·sqlite
r***12382 小时前
mysql怎么查看
数据库·mysql