【Python3.13】第一个Django5.1项目

创建项目

通过PyCharm创建,点击file,new Project,弹窗中配置Django项目配置,仅需要配置解释器即可

创建好的项目目录如下:

Django配置文件

Django配置文件是一个settings.py文件,它包含了项目的所有配置选项。以下是一些常见的配置设置以及它们的作用:

  1. SECRET_KEY: 一个密钥,用于安全的生成签名等。

  2. DEBUG: 是否开启调试模式,开启后自动重载代码,显示更多错误信息。

  3. ALLOWED_HOSTS: 允许访问的主机列表,为空时允许所有。

  4. INSTALLED_APPS: 项目中安装的应用列表。

  5. MIDDLEWARE: 中间件列表,用于处理请求和响应。

  6. ROOT_URLCONF: 根URL配置模块。

  7. TEMPLATES: 模板设置,包括模板目录等。

  8. DATABASES: 数据库配置,包括引擎、用户、密码等。

  9. LANGUAGE_CODE: 项目语言。

  10. TIME_ZONE: 时区。

  11. STATIC_URL: 静态文件的URL前缀。

  12. STATIC_ROOT: 静态文件的根目录,用于收集静态文件。

  13. MEDIA_URL: 媒体文件的URL前缀。

  14. MEDIA_ROOT: 媒体文件的根目录。

这些配置项可以在settings.py文件中直接设置,或者通过环境变量、命令行参数、或者一个local_settings.py文件来覆盖。

示例代码:

# settings.py
 
import os
 
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'your-secret-key'
 
# 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 = 'your_project_name.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 = 'your_project_name.wsgi.application'
 
# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases
 
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
 
# Internationalization
# https://docs.dj

运行项目

Terminal执行:python manage.py runserver

按照命令提示执行:python manage.py migrate

点击链接出现下图,算是安装成功

自定义项目首页

创建一个index应用,用来配置网站首页:

配置view.py

from django.shortcuts import render


def index(request):
    return render(request, 'index.html')

创建一个用来存放视图的文件夹:

在文件夹中创建自己的首页Index.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello World</title>
</head>
<body>
<h1>菜鸟的第一个网页</h1>
<p>This is a simple HTML page with a heading and a paragraph.</p>
<p>This is the second paragraph.</p>
<p>This is the third paragraph.</p>
</body>
</html>

配置settings.py,将index应用配置进去,同时指定视图目录:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'index',
]
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',
            ],
        },
    },
]

配置urls.py路由,配置一个根目录:

from django.contrib import admin
from django.urls import path

from index.view import index

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', index),
]

重新运行项目,首页变为配置的index.html:

配置数据库连接:

需要配置settings.py文件,此处配置了多个连接,默认的为mysql,使用的驱动引擎为django.db.backends.mysql,可以根据自己需要配置不同类型的数据库

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': "dbname",
        'USER': 'dbuser',
        'PASSWORD': 'xxx',
        'HOST': 'xxx',
        'PORT': '3306',
    },
    "db_sqlite3": {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'sqlite3',
    }
}

配置好数据库连接以后在控制台执行数据库迁移命令python manage.py migrate,会将Django 自带的 Admin 后台管理功能、Auth 用户认证功能以及会话机制等功能使用到的数据表创建至配置的mysql数据库:

xxx@xxxMacBook-Pro dataCenterWeb % python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying sessions.0001_initial... OK

此时数据库中会创建成功如下数据表:

验证配置是否成功:

index.html视图内容改为:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello World</title>
</head>
<body>
<h1>菜鸟的第一个网页</h1>
<p>This is a simple HTML page with a heading and a paragraph.</p>
<p>This is the second paragraph.</p>
<p>This is the third paragraph.</p>
<ul>
        {% for obj in objs %}
            <li>{{ obj }}</li>
        {% endfor %}
    </ul>
</body>
</html>

view.py内容改为:

from django.contrib.contenttypes.models import ContentType
from django.shortcuts import render


def index(request):
    obj = ContentType.objects.values_list().all()
    return render(request, 'index.html', {'objs': obj})

访问网站首页:

和数据库中的数据做对比两者一致,说明配置文件连接到了数据库:

中间件

中间件配置也是在settings.py中,需要注意的是中间件 MIDDLEWARE 的值为列表,因此中间件的设置顺序非常重要,随意变更中间件的位置可能会导致功能异常

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',
]
中间件作用
SecurityMiddleware提供安全机制,保护用户与网站的通信安全。
SessionMiddlewareSession 会话功能。
CommonMiddleware处理请求信息,规范化请求内容。
CsrfViewMiddleware启用 CSRF 防护功能。
AuthenticationMiddleware启用内置的用户认证系统。
MessageMiddleware提供信息提示功能。
XFrameOptionsMiddleware防止恶意程序单击劫持。

大部分情况下django内置的中间件可满足我们的开发需求,同时也允许我们自定义中间件来处理用户请求信息和返回响应内容,自定义的中间件也需要配置到MIDDLEWARE中进行激活,否则不会生效

请按照以下要求创建一个前后端分离的博客网站: ### 技术栈要求 - **后端**: Python 3.13.7 + Django 5.2.6 - **数据库**: MySQL 8.4 - **API框架**: Django REST Framework - **前端**: 使用任意前端框架(如Vue/React)通过API与后端交互 - **认证**: JWT认证 - **依赖管理**: requirements.txt - **环境配置**: .env文件 ### 项目结构要求 blog_project/ ├── backend/ │ ├── blog/ │ │ ├── init.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── models.py │ │ ├── serializers.py │ │ ├── views.py │ │ ├── urls.py │ │ └── permissions.py │ ├── config/ │ │ ├── init.py │ │ ├── settings.py │ │ ├── urls.py │ │ └── wsgi.py │ ├── requirements.txt │ ├── .env.example │ └── manage.py └── README.md text ### 具体实现要求 #### 1. 环境配置和依赖管理 创建详细的requirements.txt文件,包含: - Django==5.2.6 - djangorestframework==3.15.2 - django-cors-headers==4.4.0 - PyMySQL==1.1.0 - python-dotenv==1.0.1 - djangorestframework-simplejwt==5.3.1 #### 2. 数据库模型设计 创建以下核心模型: - User(扩展Django用户模型) - Category - Tag - Post - Comment 要求包含完整的字段定义、Meta类和关系设计。 #### 3. API接口设计 实现以下RESTful API端点: - 用户注册/登录/刷新token - 文章CRUD操作 - 分类和标签列表 - 评论管理 - 文章搜索和过滤 #### 4. 认证和权限系统 - JWT认证配置 - 基于角色的权限控制 - 自定义权限类 #### 5. 配置和设置 - 数据库配置(MySQL 8.4) - 静态文件和媒体文件配置 - CORS配置 - 安全设置 - 环境变量管理 #### 6. 序列化器 为每个模型创建对应的序列化器,包含完整的字段验证和关系处理。 #### 7. 视图和路由 使用ViewSet和Router创建清晰的API结构,包含适当的过滤、分页和搜索功能。 ### 代码生成要求 请为以下每个文件提供完整、可运行的代码: 1. **requirements.txt** - 完整的依赖列表 2. **config/settings.py** - Django配置,包含数据库、REST框架、JWT等配置 3. **blog/models.py** - 所有数据模型 4. **blog/serializers.py** - 所有序列化器 5. **blog/views.py** - 基于ViewSet的API视图 6. **blog/urls.py** - API路由配置 7. **blog/permissions.py** - 自定义权限类 8. **config/urls.py** - 项目主路由 9. **.env.example** - 环境变量模板 ### 扩展性考虑 - 使用应用分层架构 - 配置依赖注入准备 - API版本控制支持 - 缓存层预留 - 日志系统配置 - 单元测试框架搭建 ### 部署准备 - 提供Dockerfile示例 - 数据库迁移脚本 - 生产环境配置说明 请基于以上要求,生成完整的项目代码和详细的实现说明。每个代码文件都要有清晰的注释,关键配置要有解释说明。
最新发布
10-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值