Django基础-创建新项目,各文件作用

学习Django的前置知识:

  • python基本语法:需要掌握Python中的变量、循环、条件判断、函数等基本概念。
  • 面向对象编程(OOP):Django的核心架构基于面向对象编程,许多功能(如模型和视图)依赖于类和方法的设计。因此,学习Python的面向对象部分是必需的。你需要理解以下概念:
    • 类与对象:如何定义和使用类。
    • 继承多态:如何通过继承实现代码复用和扩展。
    • 封装:如何隐藏实现细节,提供接口。

2. HTML/CSS基础

  • HTML:了解基本的页面结构,标签和属性。
  • CSS:用于样式化网页,可以帮助你在Django项目中自定义前端页面的展示。

3. JavaScript基础

  • 基础语法:用于实现页面上的交互和动态效果。
  • AJAX:可以在不刷新页面的情况下与服务器进行通信,常用于Django中的异步操作。

4. 数据库基础

  • SQL:了解基本的SQL语法,如何进行查询、插入、更新和删除操作。
  • Django使用ORM(对象关系映射)与数据库进行交互,虽然可以不直接写SQL,但了解数据库如何工作很有帮助。

5. HTTP/网络基础

  • HTTP协议:理解基本的GET、POST请求以及HTTP状态码。
  • Django作为一个Web框架,处理HTTP请求和响应是核心功能之一。

1. 项目结构:

首先,确保你将项目文件按Django的标准结构进行组织。Django项目的基本结构如下:

myproject/├── myproject/│   ├── __init__.py│   ├── settings.py│   ├── urls.py│   ├── asgi.py│   └── wsgi.py├── myapp/│   ├── migrations/│   ├── __init__.py│   ├── admin.py│   ├── apps.py│   ├── models.py│   ├── views.py│   ├── urls.py│   └── templates/│       ├── about.html│       ├── getinformation.html│       ├── index.html│       ├── welcome.html├── static/│   ├── css/│   ├── js/│   └── images/├── manage.py

2. 在cmd中创建Django项目:

首先,在要创建项目的文件夹运行cmd,输入下面这行命令,创建一个名为myproject的项目文件夹。

django-admin startproject myproject

接着输入下面两行命令,在刚刚创建的项目中创建一个新的Django应用:

cd myproject

python manage.py startapp myapp

2. 1 .在pycharm中创建Django项目:

点这个创建新项目,正常来说,第一次创建的话,pycharm会自动帮你下载Django包到你的本地python环境中。当然也可以手动用pip安装。

3. Django配置:

编辑 myproject/settings.py 文件,将 myapp 添加到 INSTALLED_APPS 列表中,并设置静态文件和模板文件的路径:

INSTALLED_APPS = [...'myapp',
]# 添加静态文件配置
STATIC_URL = '/static/'
STATICFILES_DIRS = [BASE_DIR / 'static']# 添加模板文件配置
TEMPLATES = [{...'DIRS': [BASE_DIR / 'myapp/templates'],...},
]

一些文件和目录的名字是 Django 框架自动生成的,并且在项目初始化或运行时依赖这些名字:

  • manage.py: 项目根目录下的 manage.py 文件是 Django 项目的入口,用于执行各种 Django 管理命令,如启动服务器、创建数据库迁移等。文件名不能更改。

  • __init__.py: 每个 Python 包(目录)下都需要包含这个文件,它可以是空的,但必须存在。它告诉 Python 该目录是一个包。

  • settings.py: 这个文件位于项目的配置文件夹中,是 Django 项目的配置文件。虽然你可以更改它的名字,但需要在 manage.pywsgi.py 等文件中同步更改 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "<your_settings>")

  • urls.py: 每个应用通常都有自己的 urls.py 文件,用于定义 URL 路由。如果更改名字,Django 将不会自动加载它。每个应用的 urls.py 文件名应保持不变。

  • wsgi.pyasgi.py: 这两个文件分别用于 WSGI 和 ASGI 服务器部署。如果你要使用 Django 进行服务器部署,默认名字应保持不变,除非你知道如何手动配置这些文件。

4.各个部分功能

1. 项目根目录 (myproject/)

这个根目录包含了项目的全局文件,包括 manage.py 和一个与项目同名的子目录。

manage.py

manage.py 是 Django 的命令行工具,用于执行管理任务,例如运行开发服务器、迁移数据库等。你可以通过运行命令 python manage.py runserver 来启动项目。

#!/usr/bin/env python
import os
import sysif __name__ == "__main__":os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")try:from django.core.management import execute_from_command_lineexcept ImportError as exc:raise ImportError("Couldn't import Django. Are you sure it's installed and available on your PYTHONPATH environment variable?") from excexecute_from_command_line(sys.argv)

2. 项目子目录 (myproject/)

这个子目录包含项目的全局配置文件,它的名字通常与项目名相同。它包含 Django 项目的核心配置文件。

__init__.py

这是一个空文件,表明 myproject/ 是一个 Python 包。

settings.py

这是 Django 项目的配置文件,包含数据库设置、静态文件设置、应用程序注册、时区、语言等信息。你会经常修改这个文件。

# settings.py# 项目安装的应用程序
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',
]# 数据库设置
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': BASE_DIR / 'db.sqlite3',}
}# 静态文件配置
STATIC_URL = '/static/'
urls.py

定义了项目的全局 URL 路由。通过此文件将用户的请求导向不同的应用或视图函数。

from django.contrib import admin
from django.urls import path, includeurlpatterns = [path('admin/', admin.site.urls),path('', include('myapp.urls')),  # 将主应用的路由包含进来
]
asgi.py

配置项目的 ASGI 入口点,通常用于异步服务器和 WebSocket。

import os
from django.core.asgi import get_asgi_applicationos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
application = get_asgi_application()
wsgi.py

配置项目的 WSGI 入口点,通常用于生产环境的部署。

import os
from django.core.wsgi import get_wsgi_applicationos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
application = get_wsgi_application()

3. 应用目录 (myapp/)

这是我们创建的自定义应用,每个应用都是一个功能模块。Django 项目可以包含多个应用,每个应用负责一个独立的功能。

migrations/

这个文件夹保存数据库迁移文件,Django 会在模型变化时自动生成这些文件。

admin.py

用于注册模型,使它们可以在 Django 管理后台进行管理。

from django.contrib import admin
from .models import UserInfoadmin.site.register(UserInfo)  # 将 UserInfo 模型注册到管理后台
apps.py

用于配置应用程序,定义应用的名称等。

from django.apps import AppConfigclass MyappConfig(AppConfig):default_auto_field = 'django.db.models.BigAutoField'name = 'myapp'
models.py

模型文件,定义数据库结构。每个模型类映射到数据库中的一张表。

models.py 文件中,虽然模型的类名和字段名称可以自定义,但有些约定不能更改:

  • 类继承自 models.Model: 你的模型类必须继承自 django.db.models.Model

from django.db import modelsclass UserInfo(models.Model):name = models.CharField(max_length=100)student_id = models.CharField(max_length=50, unique=True)class_name = models.CharField(max_length=50)email = models.EmailField()phone = models.CharField(max_length=15)message = models.TextField()def __str__(self):return self.name
  • models.Model 是 Django 的模型基类,不能省略或替换。

  • 字段类型: Django 提供了一系列字段类型(CharField, IntegerField, EmailField 等),这些类型不能任意修改。如果你要保存字符串、整数等数据,必须使用 Django 提供的字段类型。

  • Meta: Meta 类是模型的内部类,可以用于定义一些模型的元数据,如数据库表名、排序等。虽然类名 Meta 可以自定义,但这是 Django 的约定,建议不要修改。如果你要定义元选项,必须用 Meta

  • class UserInfo(models.Model):name = models.CharField(max_length=100)class Meta:db_table = 'user_info_table'
    

views.py

视图文件,处理请求并返回响应。视图可以直接返回 HTML 或通过模板返回动态内容。

views.py 中视图函数名或类名可以自定义,但某些地方的名字必须符合 Django 的约定:

  • request 参数: 无论是基于函数的视图还是基于类的视图,第一个参数必须是 request,它是 Django 自动传递的 HttpRequest 对象。不能修改这个参数名,否则视图函数无法正确接收请求数据。

from django.shortcuts import render
from .models import UserInfodef index(request):return render(request, 'myapp/index.html')def submit_info(request):if request.method == 'POST':name = request.POST['name']student_id = request.POST['student_id']class_name = request.POST['class_name']email = request.POST['email']phone = request.POST['phone']message = request.POST['message']UserInfo.objects.create(name=name, student_id=student_id, class_name=class_name,email=email, phone=phone, message=message)return render(request, 'myapp/success.html')return render(request, 'myapp/index.html')
视图类继承自 View 或其子类: 如果使用基于类的视图,必须继承 django.views.View 或其子类。类名可以自定义,但继承必须正确:
from django.views import Viewclass MyView(View):def get(self, request):return HttpResponse('Hello, World!')
forms.py

用于定义表单字段和验证规则,特别适用于复杂的表单处理。

表单的文件名可以是任意的,但表单类必须继承自 forms.Formforms.ModelForm。此外,表单字段必须使用 Django 提供的字段类型。

  • 表单类继承自 forms.Formforms.ModelForm:

  • from django import formsclass UserInfoForm(forms.ModelForm):class Meta:model = UserInfofields = ['name', 'email']
    

    Meta: 与模型类似,如果使用 ModelFormMeta 类的名称不可更改。

urls.py

定义应用的 URL 路由。

  • urlpatterns 列表: 这个列表用于存放 URL 模式与视图函数的对应关系,名字必须为 urlpatterns,不能修改,否则 Django 无法找到你的路由。

  • path()re_path(): 路由必须使用 Django 提供的 path()re_path() 函数来定义,不能使用其他方式。

from django.urls import path
from . import viewsurlpatterns = [path('', views.index, name='index'),path('submit-info/', views.submit_info, name='submit_info'),
]
templates/

存放 HTML 模板的文件夹。Django 将根据模板生成动态页面。

<!DOCTYPE html>
<html>
<head><title>信息填写</title>
</head>
<body><h1>填写您的信息</h1><form method="POST" action="{% url 'submit_info' %}">{% csrf_token %}姓名: <input type="text" name="name"><br>学号: <input type="text" name="student_id"><br>班级: <input type="text" name="class_name"><br>邮箱: <input type="email" name="email"><br>电话: <input type="text" name="phone"><br>留言: <textarea name="message"></textarea><br><input type="submit" value="提交"></form>
</body>
</html>

4. static/ 目录

static/ 目录用于存放静态文件,例如 CSS、JavaScript 和图片等。静态文件在生产环境中并不会动态生成,而是直接提供给用户的。

css/

这里存放项目的 CSS 文件,用于定义页面的样式。

示例文件:

style.css

body {font-family: Arial, sans-serif;background-color: #f9f9f9;
}h1 {color: #333;
}form {margin: 20px 0;
}
js/

这里存放 JavaScript 文件,用于增强网页的交互性。

示例文件:

script.js

document.addEventListener("DOMContentLoaded", function() {alert("页面加载完毕!");
});

images/

这个文件夹用于存储图片文件,例如 logo、背景图片等。

5. migrations/ 目录

migrations/ 目录是 Django 用来记录模型变更的地方。当你对数据库模型进行修改后,需要生成迁移文件并应用到数据库中。

迁移文件会自动生成,用于保持数据库表结构与模型一致。

示例迁移文件:

0001_initial.py

from django.db import migrations, modelsclass Migration(migrations.Migration):initial = Truedependencies = []operations = [migrations.CreateModel(name='UserInfo',fields=[('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),('name', models.CharField(max_length=100)),('student_id', models.CharField(max_length=50, unique=True)),('class_name', models.CharField(max_length=50)),('email', models.EmailField(max_length=254)),('phone', models.CharField(max_length=15)),('message', models.TextField()),],),]

6. templates/ 目录

templates/ 目录用于存放模板文件。在 Django 中,模板系统允许开发者将 HTML 代码与动态内容结合,通过视图函数来生成网页。

通常,templates/ 目录是按应用分为多个子目录的。例如,在 myapp/ 应用中,模板文件位于 myapp/templates/myapp/ 下。

index.html
<!DOCTYPE html>
<html>
<head><title>信息填写</title><link rel="stylesheet" href="{% static 'css/style.css' %}">
</head>
<body><h1>填写您的信息</h1><form method="POST" action="{% url 'submit_info' %}">{% csrf_token %}姓名: <input type="text" name="name"><br>学号: <input type="text" name="student_id"><br>班级: <input type="text" name="class_name"><br>邮箱: <input type="email" name="email"><br>电话: <input type="text" name="phone"><br>留言: <textarea name="message"></textarea><br><input type="submit" value="提交"></form>
</body>
</html>

7. tests.py

这是 Django 项目中的测试文件,用于编写自动化测试。你可以在这里编写测试来验证应用的功能是否正常工作。

示例代码:

from django.test import TestCase
from .models import UserInfoclass UserInfoTest(TestCase):def setUp(self):UserInfo.objects.create(name="张三", student_id="12345", class_name="2024级", email="zhangsan@example.com", phone="123456789", message="测试留言")def test_user_info(self):user = UserInfo.objects.get(student_id="12345")self.assertEqual(user.name, "张三")self.assertEqual(user.email, "zhangsan@example.com")

8. forms.py (可选)

forms.py 用于定义 Django 表单类,便于处理用户提交的数据。虽然可以直接在视图中手动处理表单数据,但通过表单类可以更好地组织代码并进行自动验证。

from django import formsclass UserInfoForm(forms.Form):name = forms.CharField(label='姓名', max_length=100)student_id = forms.CharField(label='学号', max_length=50)class_name = forms.CharField(label='班级', max_length=50)email = forms.EmailField(label='邮箱')phone = forms.CharField(label='电话', max_length=15)message = forms.CharField(label='留言', widget=forms.Textarea)

9. admin.py

用于将模型注册到 Django 管理后台,以便通过 Django 的默认管理界面进行管理。每个注册的模型可以在后台进行增删改查等操作。

admin.site.register(): 用于将模型注册到 Django 的管理后台,admin.site 是 Django 内置的后台站点管理器,必须保持不变。

示例代码:

from django.contrib import admin
from .models import UserInfo# 注册模型到管理后台
admin.site.register(UserInfo)

10. apps.py

这个文件用于定义 Django 应用程序的配置信息。每个 Django 应用都可以有一个 AppConfig 类,负责定义应用的元数据。

示例代码:

from django.apps import AppConfigclass MyappConfig(AppConfig):default_auto_field = 'django.db.models.BigAutoField'name = 'myapp'

11. urls.py

每个应用可以有自己独立的 URL 路由配置文件,这里定义了视图函数和 URL 的映射关系。项目的全局 urls.py 文件通常会包含应用的 urls.py

示例代码:

from django.urls import path
from . import viewsurlpatterns = [path('', views.index, name='index'),path('submit-info/', views.submit_info, name='submit_info'),
]

中间件 (MIDDLEWARE)

settings.py 中,MIDDLEWARE 是一个列表,不能更改其名称。并且,如果你使用 Django 内置功能如认证或消息系统,某些中间件必须存在,例如:

  • django.contrib.sessions.middleware.SessionMiddleware: 必须存在于 MIDDLEWARE 中,否则会导致会话处理失败。
  • django.contrib.auth.middleware.AuthenticationMiddleware: 如果要使用认证系统,此中间件必须添加。

通过以上的文件结构,Django 项目实现了前后端分离的模块化开发,每个部分职责清晰,便于管理和扩展。每个应用的目录也独立组织,方便大规模项目的维护。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1542274.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【无人机设计与控制】 基于matlab的蚁群算法优化无人机uav巡检

摘要 本文使用蚁群算法&#xff08;ACO&#xff09;优化无人机&#xff08;UAV&#xff09;巡检路径。无人机巡检任务要求高效覆盖特定区域&#xff0c;以最小化能源消耗和时间。本研究提出的算法通过仿生蚁群算法优化巡检路径&#xff0c;在全局搜索和局部搜索中平衡探索与开…

文档布局内容检测系统源码分享

文档布局内容检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

银河麒麟高级服务器操作系统V10外接硬盘挂载指南

银河麒麟高级服务器操作系统V10外接硬盘挂载指南 1、临时挂载外接硬盘2、永久挂载外接硬盘3、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在使用银河麒麟高级服务器操作系统V10时&#xff0c;您可能希望将外接硬盘&#xff08;如sd…

django应用JWT(JSON Web Token)实战

文章目录 一、什么是JWT二、为什么使用JWT三、在django项目中如何应用JWT1、安装djangorestframework-simplejwt库&#xff1a;2、在settings.py中配置JWT认证&#xff1a;3、在urls.py中配置JWT的获取和刷新路由&#xff1a; 四、JWT如何使用1、调用生成JWT的接口获取JWT2、客…

C/C++内存管理 ——

目录 五、C/C内存管理 1、C/C内存分布 2、C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free 3、C内存管理方式 1.new/delete操作内置类型 2.new和delete操作自定义类型 4、operator new与operator delete函数 5、new和delete的实现原理 1.内置类…

十六 未来信息综合技术(考点篇)试题

SaaS&#xff1a;软件即服务&#xff0c;PaaS&#xff1a;平台即服务&#xff0c;LaaS&#xff1a;基础设施即服务。 SaaS&#xff1a;偏向于提供各种软件接口来提供相关的服务&#xff1b;PaaS&#xff1a;偏向于吧一些基础的功能整合成一个平台&#xff0c;把整个平台或部分…

【人工智能】Linux系统Mamba安装流程

在编译安装 mamba 之前&#xff0c;你需要确保已安装正常的PyTorch环境。 # 安装必要的系统依赖 sudo apt update sudo apt install build-essential # 安装mamba依赖 pip install packaging wheel # 克隆仓库 git clone https://github.com/Dao-AILab/causal-conv1d.git git …

【python】修改字典的内容

person {"name": "John", "age": 30, "city": "New York"} print("最开始的信息&#xff1a;",person)def process_person_info(person):# 检查对象中是否包含所有必要的键if name in person and age in person …

计算机人工智能前沿进展-大语言模型方向-2024-09-22

计算机人工智能前沿进展-大语言模型方向-2024-09-21 引言: 全球最热销的国产游戏-《黑神话: 悟空》不仅给世界各地玩家们带来愉悦&#xff0c;而且对计算机人工智能研究也带来新的思考。在本期的论文速读中&#xff0c;我们带来一篇关于视觉语言模型&#xff08;VLMs&#xf…

Java只有国人在搞了?

从Java诞生到现在&#xff0c;在全球一直属于最大的开发平台&#xff0c;拥有着世界上最多的开发者和最活跃的社区。你说Java只有国人在搞就有点过分了&#xff0c;Java中常用的主流框架全是外国人写的&#xff0c;虽说阿里也为Java做了很多贡献&#xff0c;但你还真没有资格说…

英伟达RTX 4090即将在10月份停产,RTX 50震撼来袭,你准备好了吗?

据多家媒体报道&#xff0c;英伟达&#xff08;NVIDIA&#xff09;及其合作伙伴计划于2024年10月停止生产其旗舰级显卡GeForce RTX 4090及其衍生型号RTX 4090D。尽管该计划尚未得到官方正式确认&#xff0c;但多家媒体和供应链消息均指出&#xff0c;这一决定旨在为即将到来的新…

vscode 配置rust格式化的正确方法

vscode 配置rust格式化的正确方法&#xff1a; 在settings.json里输入&#xff1a; "[rust]": {"editor.defaultFormatter": "rust-lang.rust-analyzer","editor.formatOnSave": true}

golang学习笔记6-更方便的转换、自定义包及网络部署【推荐收藏】

在上一个笔记中&#xff0c;我讲了基本数据类型的转换。不难发现&#xff0c;string和基本类型的互转比较麻烦&#xff0c;所以我自定义了一个包strtrans&#xff0c;封装了四个函数&#xff1a;ToString(),ToInt(),ToFloat(),ToBool()。其中ToString()适用于整数型&#xff0c…

关于字节 c++

字节的介绍 字节是计算机中最小的存储单位&#xff0c;通常由8个二进制位组成&#xff0c;用来存储一个字符。在C中&#xff0c;字节也是基本数据类型之一&#xff0c;用关键字"byte"来表示。字节主要用于存储一些较小的数据&#xff0c;如整数、字符等。字节的大小…

UE5入门

1.快捷键 工欲善其事&#xff0c;必先利其器&#xff0c;所以学习UE关卡编辑器快捷键必不可少 1.1Actor 选中actor &#xff0c; Q&#xff1a;选择模式 W&#xff1a;平移 E&#xff1a;旋转 R&#xff1a;缩放 CtrlB&#xff1a;打开Actor文件位置 F&#xff1a;聚焦 Ctr…

RP2040 C SDK GPIO和IRQ 唤醒功能使用

RP2040 C SDK GPIO和中断功能使用 &#x1f4d1;RP2040 中断功能简介 Each core is equipped with a standard ARM Nested Vectored Interrupt Controller (NVIC) which has 32 interrupt inputs. Each NVIC has the same interrupts routed to it, with the exception of the…

Python办公自动化教程(002):PDF的拆分与合并

1、PyPDF2 介绍 介绍&#xff1a; PyPDF2是一个用于处理PDF文件的Python库&#xff0c;它提供了丰富的功能来读取、编辑、合并、拆分PDF文档&#xff0c;以及提取文本、图像和其他内容。 功能&#xff1a; 读取PDF&#xff1a;PyPDF2可以轻松地打开和读取PDF文件&#xff0c;获…

计算机丢失mfc110.dll是什么原因与有哪些解决方法详解

丢失动态链接库文件&#xff08;DLL&#xff09;是比较常见的一种情况&#xff0c;其中之一就是“计算机丢失mfc110.dll”。这个问题通常是由于系统文件损坏或缺失引起的&#xff0c;给计算机的正常运行带来了困扰。为了解决这个问题&#xff0c;我总结了以下几种方法&#xff…

1512. 好数对的数目

目录 一&#xff1a;题目&#xff1a; 二&#xff1a;代码&#xff1a; 三&#xff1a;结果&#xff1a; 一&#xff1a;题目&#xff1a; 给你一个整数数组 nums 。 如果一组数字 (i,j) 满足 nums[i] nums[j] 且 i < j &#xff0c;就可以认为这是一组 好数对 。 返…

状态模式:将对象行为与状态解耦

状态模式&#xff08;State Pattern&#xff09;是一种行为设计模式&#xff0c;它允许对象在其内部状态改变时改变其行为&#xff0c;使对象看起来好像修改了其类。 状态模式的核心思想是将对象的行为封装在不同的状态对象中&#xff0c;每个状态对象都代表了对象在某一特定状…