详细介绍:Django 配置与安装完整指南

详细介绍:Django 配置与安装完整指南

目录环境准备

Django 安装

创建 Django 项目

项目配置详解

数据库配置

静态文件配置

应用配置

完整示例

环境准备Python 环境检查bash

# 检查 Python 版本

python --version

# 或

python3 --version

# 检查 pip 版本

pip --version

创建虚拟环境(推荐)bash

# 安装 virtualenv(如果尚未安装)

pip install virtualenv

# 创建虚拟环境

virtualenv django_env

# 激活虚拟环境

# Windows

django_env\Scripts\activate

# Linux/Mac

source django_env/bin/activate

Django 安装使用 pip 安装bash

# 安装最新版本

pip install django

# 安装指定版本

pip install django==4.2.0

# 验证安装

python -m django --version

使用 requirements.txt(推荐)创建 requirements.txt 文件:

txt

Django==4.2.0

psycopg2-binary==2.9.6

Pillow==9.5.0

python-decouple==3.8

安装依赖:

bash

pip install -r requirements.txt

创建 Django 项目初始化项目bash

# 创建项目

django-admin startproject myproject

# 进入项目目录

cd myproject

# 创建应用

python manage.py startapp myapp

项目结构text

myproject/

├── manage.py

├── myproject/

│ ├── __init__.py

│ ├── settings.py

│ ├── urls.py

│ ├── asgi.py

│ └── wsgi.py

└── myapp/

├── __init__.py

├── admin.py

├── apps.py

├── models.py

├── tests.py

├── views.py

└── migrations/

└── __init__.py

项目配置详解基本设置 (settings.py)python

"""

Django settings for myproject project.

"""

import os

from pathlib import Path

from decouple import config # 用于环境变量管理

# 构建项目根目录路径

BASE_DIR = Path(__file__).resolve().parent.parent

# 安全设置

SECRET_KEY = config('SECRET_KEY', default='your-secret-key-here')

# 调试模式

DEBUG = config('DEBUG', default=True, cast=bool)

# 允许的主机

ALLOWED_HOSTS = config('ALLOWED_HOSTS', default='localhost,127.0.0.1', cast=lambda v: [s.strip() for s in v.split(',')])

# 应用定义

INSTALLED_APPS = [

'django.contrib.admin',

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.messages',

'django.contrib.staticfiles',

# 第三方应用

'rest_framework',

# 本地应用

'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',

]

# URL 配置

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',

],

},

},

]

# WSGI 配置

WSGI_APPLICATION = 'myproject.wsgi.application'

数据库配置SQLite 配置(默认)python

# settings.py

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.sqlite3',

'NAME': BASE_DIR / 'db.sqlite3',

}

}

PostgreSQL 配置python

# settings.py

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.postgresql',

'NAME': config('DB_NAME', default='mydatabase'),

'USER': config('DB_USER', default='myuser'),

'PASSWORD': config('DB_PASSWORD', default='mypassword'),

'HOST': config('DB_HOST', default='localhost'),

'PORT': config('DB_PORT', default='5432'),

}

}

MySQL 配置python

# settings.py

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.mysql',

'NAME': config('DB_NAME', default='mydatabase'),

'USER': config('DB_USER', default='myuser'),

'PASSWORD': config('DB_PASSWORD', default='mypassword'),

'HOST': config('DB_HOST', default='localhost'),

'PORT': config('DB_PORT', default='3306'),

'OPTIONS': {

'charset': 'utf8mb4',

},

}

}

静态文件配置python

# settings.py

# 静态文件 URL

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')

# 静态文件查找器

STATICFILES_FINDERS = [

'django.contrib.staticfiles.finders.FileSystemFinder',

'django.contrib.staticfiles.finders.AppDirectoriesFinder',

]

应用配置创建应用配置python

# myapp/apps.py

from django.apps import AppConfig

class MyappConfig(AppConfig):

default_auto_field = 'django.db.models.BigAutoField'

name = 'myapp'

verbose_name = '我的应用'

模型示例python

# myapp/models.py

from django.db import models

from django.urls import reverse

class Category(models.Model):

name = models.CharField(max_length=100, verbose_name='分类名称')

created_at = models.DateTimeField(auto_now_add=True)

class Meta:

verbose_name = '分类'

verbose_name_plural = '分类'

def __str__(self):

return self.name

class Article(models.Model):

title = models.CharField(max_length=200, verbose_name='标题')

content = models.TextField(verbose_name='内容')

category = models.ForeignKey(Category, on_delete=models.CASCADE, verbose_name='分类')

is_published = models.BooleanField(default=True, verbose_name='是否发布')

created_at = models.DateTimeField(auto_now_add=True)

updated_at = models.DateTimeField(auto_now=True)

class Meta:

verbose_name = '文章'

verbose_name_plural = '文章'

ordering = ['-created_at']

def __str__(self):

return self.title

def get_absolute_url(self):

return reverse('article_detail', kwargs={'pk': self.pk})

视图示例python

# myapp/views.py

from django.shortcuts import render, get_object_or_404

from django.views.generic import ListView, DetailView

from .models import Article, Category

class ArticleListView(ListView):

model = Article

template_name = 'myapp/article_list.html'

context_object_name = 'articles'

paginate_by = 10

def get_queryset(self):

return Article.objects.filter(is_published=True)

class ArticleDetailView(DetailView):

model = Article

template_name = 'myapp/article_detail.html'

context_object_name = 'article'

def category_articles(request, category_id):

category = get_object_or_404(Category, id=category_id)

articles = Article.objects.filter(category=category, is_published=True)

return render(request, 'myapp/category_articles.html', {

'category': category,

'articles': articles

})

URL 配置python

# myapp/urls.py

from django.urls import path

from . import views

app_name = 'myapp'

urlpatterns = [

path('', views.ArticleListView.as_view(), name='article_list'),

path('article//', views.ArticleDetailView.as_view(), name='article_detail'),

path('category//', views.category_articles, name='category_articles'),

]

# myproject/urls.py

from django.contrib import admin

from django.urls import path, include

from django.conf import settings

from django.conf.urls.static import static

urlpatterns = [

path('admin/', admin.site.urls),

path('', include('myapp.urls')),

]

# 开发环境下的媒体文件服务

if settings.DEBUG:

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

完整示例环境变量配置 (.env)bash

# .env 文件

DEBUG=True

SECRET_KEY=your-secret-key-here

ALLOWED_HOSTS=localhost,127.0.0.1

# 数据库配置

DB_NAME=mydatabase

DB_USER=myuser

DB_PASSWORD=mypassword

DB_HOST=localhost

DB_PORT=5432

管理界面配置python

# myapp/admin.py

from django.contrib import admin

from .models import Category, Article

@admin.register(Category)

class CategoryAdmin(admin.ModelAdmin):

list_display = ['name', 'created_at']

search_fields = ['name']

@admin.register(Article)

class ArticleAdmin(admin.ModelAdmin):

list_display = ['title', 'category', 'is_published', 'created_at']

list_filter = ['category', 'is_published', 'created_at']

search_fields = ['title', 'content']

list_editable = ['is_published']

date_hierarchy = 'created_at'

数据库迁移bash

# 创建迁移文件

python manage.py makemigrations

# 应用迁移

python manage.py migrate

# 创建超级用户

python manage.py createsuperuser

运行开发服务器bash

# 运行开发服务器

python manage.py runserver

# 指定端口运行

python manage.py runserver 8080

# 允许外部访问

python manage.py runserver 0.0.0.0:8000

生产环境配置安全设置python

# settings.py

# 生产环境设置

if not DEBUG:

# 安全设置

SECURE_SSL_REDIRECT = True

SESSION_COOKIE_SECURE = True

CSRF_COOKIE_SECURE = True

SECURE_BROWSER_XSS_FILTER = True

SECURE_CONTENT_TYPE_NOSNIFF = True

# HSTS 设置

SECURE_HSTS_SECONDS = 31536000 # 1年

SECURE_HSTS_INCLUDE_SUBDOMAINS = True

SECURE_HSTS_PRELOAD = True

日志配置python

# settings.py

LOGGING = {

'version': 1,

'disable_existing_loggers': False,

'handlers': {

'file': {

'level': 'DEBUG',

'class': 'logging.FileHandler',

'filename': os.path.join(BASE_DIR, 'debug.log'),

},

},

'loggers': {

'django': {

'handlers': ['file'],

'level': 'DEBUG',

'propagate': True,

},

},

}

通过以上完整的配置指南,您可以成功安装和配置 Django 项目,并根据需要进行自定义设置。记得根据实际项目需求调整配置参数。

相关推荐

2025年首批“跟着赛事游河北”赛事目录及文旅优惠措施发布
鸭舌帽做法教程图解
365bet提前结束投注

鸭舌帽做法教程图解

📅 08-30 👀 744
剃须刀哪个牌子的好?八大品牌全方位对比解析!