Django — 配置和路由

目录

一、项目的配置

python 复制代码
# settings.py
from pathlib import Path  # 导入 Path 类,用于处理文件路径

# Build paths inside the project like this: BASE_DIR / 'subdir'.
# 获取当前文件的绝对路径,并返回其上两级目录作为 BASE_DIR
# 意思是项目根目录为文件所在路径的父级目录的父级目录
# BASE_DIR 表示项目创建的时候产生的项目名(Project)的路径
# Django 会依此来定位工程内的相关文件,我们也可以使用该参数来构造文件路径
BASE_DIR = Path(__file__).resolve().parent.parent


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
# 设置 SECRET_KEY,用于 Django 应用的安全性
# 秘钥,用来验证
SECRET_KEY = '6^j2#*d&!_2cnqru29g26m5(_7yqb9_w1^6+x*gt--#(67y^lm'

# SECURITY WARNING: don't run with debug turned on in production!
# 设置 DEBUG 模式为 True,表示开启调试模式
# 作用:
# 修改代码文件,程序自动重启
# Django 程序出现异常时,向前端显示详细的错误追踪信息
# 非调试模式下,仅返回 Server Error (500)
# 注意:部署线上运行的 Django 不要运行在调式模式下,记得修改为 DEBUG = False
DEBUG = True

# 设置允许的主机列表(ip 地址、服务器地址、Ubuntu 的 ip),留空表示允许所有主机
ALLOWED_HOSTS = []


# Application definition
# 注册应用,所有应用都必须注册才能使用
INSTALLED_APPS = [
    # Django 自带的管理后台应用
    'django.contrib.admin',
    # Django 自带的用户认证应用
    'django.contrib.auth',
    # Django 自带的内容类型应用
    'django.contrib.contenttypes',
    # Django 自带的会话管理应用
    'django.contrib.sessions',
    # Django 自带的消息传递应用
    'django.contrib.messages',
    # Django 自带的静态文件处理应用
    'django.contrib.staticfiles',
    # 注册子应用 -- users
    'users.apps.UsersConfig',
]

# 中间件
MIDDLEWARE = [
    # Django 自带的安全中间件
    'django.middleware.security.SecurityMiddleware',
    # Django 自带的会话中间件
    'django.contrib.sessions.middleware.SessionMiddleware',
    # Django 自带的通用中间件
    'django.middleware.common.CommonMiddleware',
    # Django 自带的 CSRF 保护中间件
    'django.middleware.csrf.CsrfViewMiddleware',
    # Django 自带的身份验证中间件
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    # Django 自带的消息传递中间件
    'django.contrib.messages.middleware.MessageMiddleware',
    # Django 自带的点击劫持保护中间件
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

# 设置项目的 URL 配置文件路径
# 路由,系统的编写路径
ROOT_URLCONF = 'Project.urls'

# 设置模板引擎配置,包括模板目录、模板上下文处理器等。
TEMPLATES = [
    {
        # Django 模板引擎的配置项
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        # 额外的模板目录,留空表示使用默认的模板目录
        'DIRS': [],
        # 表示启用应用程序模板目录
        'APP_DIRS': True,
        # Django 模板引擎配置的一部分,用于指定模板上下文处理器(context processors)的选项
        'OPTIONS': {
            # 一个列表,用于指定要应用的模板上下文处理器。
            'context_processors': [
                # Django 自带的模板上下文处理器
                'django.template.context_processors.debug',
                # Django 自带的模板上下文处理器
                'django.template.context_processors.request',
                # Django 自带的模板上下文处理器
                'django.contrib.auth.context_processors.auth',
                # Django 自带的模板上下文处理器
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

# 设置 WSGI 应用程序对象的入口路径
WSGI_APPLICATION = 'Project.wsgi.application'


# Database
# https://docs.djangoproject.com/en/3.1/ref/settings/#databases
# 数据库
DATABASES = {
    'default': {
        # 使用 SQLite3 数据库引擎
        'ENGINE': 'django.db.backends.sqlite3',
        # 数据库文件路径,指向 BASE_DIR 下的 db.sqlite3 文件
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}


# Password validation
# https://docs.djangoproject.com/en/3.1/ref/settings/#auth-password-validators
# 用户密码的验证
AUTH_PASSWORD_VALIDATORS = [
    {
        # 用户属性相似性验证器
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        # 最小长度验证器
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        # 常见密码验证器
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        # 数字密码验证器
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]


# Internationalization
# https://docs.djangoproject.com/en/3.1/topics/i18n/
# Django 支持本地化处理,即显示语言与时区支持本地化
# 本地化是将显示的语言、时间等使用本地的习惯,这里的本地化就是进行中国化
# 中国大陆地区使用简体中文,时区使用亚洲/上海时区,注意这里不使用北京时区表示
# 初始化的工程默认语言和时区为英语和 UTC 标准时区

# 设置语言代码为中文
LANGUAGE_CODE = 'zh-hans' # en-us 为英文(美国)
# 设置时区为亚洲/上海时区
TIME_ZONE = 'Asia/Shanghai' # UTC 为世界时
# 启用国际化(I18N)
USE_I18N = True
# 启用本地化(L10N)
USE_L10N = True
# 使用时区
USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.1/howto/static-files/

# 静态文件的 URL 前缀
STATIC_URL = '/static/'
# 存放查找静态文件的目录
STATICFILES_DIRS = [
    BASE_DIR / 'static'
]

二、静态文件的配置

静态文件 是指在网站开发中不经常变化的文件,如 CSS 样式表、JavaScript 脚本、图像文件等。

一般会将静态文件放到一个单独的目录中,以方便管理。

在 html 页面中调用时,也需要指定静态文件的路径,Django 中提供了一种解析的方式配置静态文件路径。

静态文件可以放在项目根目录下,也可以放在应用的目录下,由于有些静态文件在项目中是通用的,所以推荐放在项目的根目录下,方便管理。

为了提供静态文件,需要配置两个参数:

  • STATICFILES_DIRS :存放查找静态文件的目录
  • STATIC_URL :访问静态文件的 URL 前缀

setting.py 中修改静态文件的两个参数为:

python 复制代码
# settings.py
# 静态文件的 URL 前缀
STATIC_URL = '/static/'
# 存放查找静态文件的目录
STATICFILES_DIRS = [
    BASE_DIR / 'static'
]

在根目录下创建 static 目录后,在其中添加一个 index.html 文件,在浏览器中就可以使用 http://127.0.0.1:8000/static/index.html 来访问。

注意:

Django 仅在调试模式下(DEBUG = True)能对外提供静态文件。

当 DEBUG = False 工作在生产模式时,Django 不再对外提供静态文件,需要是用 collectstatic 命令来收集静态文件并交由其它静态文件服务器来提供。

三、路由

1、概述

URL 是 Web 服务的入口,用户通过浏览器发送过来的任何请求,都是发送到一个指定的 URL 地址,然后被响应。

URL 路由在 Django 项目中的体现就是 urls.py 文件,这个文件可以有很多个,但绝对不会在同一目录下。实际上 Django 提倡项目有个根 urls.py,各 app 下分别有自己的一个 urls.py,既集中又分治,是一种解耦的模式。

Django 的主要路由信息定义在工程同名目录下的 urls.py 文件中,该文件是 Django 解析路由的入口。

每个子应用为了保持相对独立,可以在各个子应用中定义属于自己的 urls.py 来保存该应用的路由,然后用主路由文件包含各应用的子路由数据。

URLconf 不检查使用何种 HTTP 请求方法,所有请求方法 POST、GET、HEAD 等都将路由到同一个 URL 的同一个视图。在视图中,才根据具体请求方法的不同,进行不同的处理。

2、代码实现

2.1、后台管理页面

python 复制代码
# Project 项目中的 urls.py
from django.contrib import admin  # 导入 Django 的管理员模块,用于管理网站后台
from django.urls import path  # 导入 Django 的 path 函数,用于配置 URL 路由

# URL 配置列表,定义了网站的所有 URL 路径和对应的处理程序
urlpatterns = [
    # 定义了一个 URL 模式
    # 将以 admin/ 开头的 URL 请求映射到管理员站点的 URL
    # admin.site.urls 表示管理员站点的 URL 配置
    path('admin/', admin.site.urls),
]

manage.py 文件下运行代码,

或者在终端里,通过 cd 命令切换到 manage.py 文件所在目录下后,输入命令:python manage.py runserver

访问网址 http://127.0.0.1:8000/admin/ 显示以下页面。

2.2、子应用自定义页面

python 复制代码
# 子应用的 views.py
from django.shortcuts import render  # 导入 Django 的 render 函数,用于渲染模板并返回响应
from django.http import HttpResponse  # 导入 Django 的 HttpResponse 类,用于创建 HTTP 响应对象

# Create your views here.

# 定义一个名为 tests 的视图函数,接收一个名为 request 的参数,表示用户的 HTTP 请求对象
def tests(request):
    # 在视图函数中,返回一个包含字符串 '测试页面' 的 HttpResponse 对象作为响应
    return HttpResponse('测试页面')
python 复制代码
# Project 项目中的 urls.py
from django.urls import path  # 导入 Django 的 path 函数,用于配置 URL 路由
from users.views import tests  # 从 users 应用的 views 模块中导入 tests 视图函数

# URL 配置列表,定义了网站的所有 URL 路径和对应的处理程序
urlpatterns = [
	# 配置 URL 路由
    path('tests/', tests),
]

manage.py 文件下运行代码,访问网址 http://127.0.0.1:8000/tests/ 显示以下页面。

2.3、子路由

有多个子应用时,推荐使用,能单独写到某一个子应用里,不需要全部都写到总路由里面,可以在子路由里面去定义和子应用相关的路由参数。

users.urls ------ users 是子应用名称,urls 是子路由的文件名称

python 复制代码
# Project 项目中的 urls.py
from django.urls import path,include  # 导入 Django 的 path 函数,用于配置 URL 路由,include 函数,用于将其它 URL 模式包含在当前 URL 配置中

# URL 配置列表,定义了网站的所有 URL 路径和对应的处理程序
urlpatterns = [
    # 配置 URL 路由
    path('users/', include('users.urls'))
]

编写子应用的 urls 页面

  • 写法一:
python 复制代码
# users 子应用的 urls.py
from django.urls import path  # 导入 Django 的 path 函数,用于配置 URL 路由
from users.views import tests  # 从 users 应用的 views 模块中导入 tests 视图函数

# URL 配置列表,定义 URL 路径和对应的处理程序
urlpatterns = [
    # 配置 URL 路由
    path('tests/', tests),
]
  • 写法二:
python 复制代码
# users 子应用的 urls.py
from django.urls import path  # 导入 Django 的 path 函数,用于配置 URL 路由
# import views # 导入当前目录下的 views.py 文件中的模块或视图函数
from users import views  # 导入 users 子应用下的 views.py 文件中的模块或视图函数

# URL 配置列表,定义 URL 路径和对应的处理程序
urlpatterns = [
    # 配置 URL 路由,调用 views.py 中的 tests 视图函数
    path('tests/', views.tests),
]
  • 写法三:
python 复制代码
# users 子应用的 urls.py
from django.urls import path  # 导入 Django 的 path 函数,用于配置 URL 路由
from .import views  # 导入当前目录下的 views.py 文件中的模块或视图函数

# URL 配置列表,定义 URL 路径和对应的处理程序
urlpatterns = [
    # 配置 URL 路由,调用 views.py 中的 tests 视图函数
    path('tests/', views.tests),
]

PEP8 代码规范

import 导入 Python 中的内置模块 ------ 自带的模块 import os

from 不是自带的,又可以使用的 ------ 下载的包,文件里面的类

manage.py 文件下运行代码,访问网址 http://127.0.0.1:8000/users/tests/ 显示以下页面。

python 复制代码
# Project 项目中的 urls.py
from django.urls import path,include  # 导入 Django 的 path 函数,用于配置 URL 路由,include 函数,用于将其它 URL 模式包含在当前 URL 配置中

# URL 配置列表,定义了网站的所有 URL 路径和对应的处理程序
urlpatterns = [
    # 配置 URL 路由
    path('', include('users.urls'))
]

子应用名称位置可以为空,但不能有多个,有多个只会运行第一个。

manage.py 文件下运行代码,访问网址 http://127.0.0.1:8000/tests/ 显示以下页面。

访问同一页面下的不同函数

python 复制代码
# 子应用的 views.py
from django.shortcuts import render  # 导入 Django 的 render 函数,用于渲染模板并返回响应
from django.http import HttpResponse  # 导入 Django 的 HttpResponse 类,用于创建 HTTP 响应对象

# Create your views here.

# 定义一个名为 tests 的视图函数,接收一个名为 request 的参数,表示用户的 HTTP 请求对象
def tests(request):
    # 在视图函数中,返回一个包含字符串 '测试页面' 的 HttpResponse 对象作为响应
    return HttpResponse('测试页面')

# 定义一个名为 index 的视图函数,接收一个名为 request 的参数,表示用户的 HTTP 请求对象
def index(request):
    # 在视图函数中,返回一个包含字符串 '这是一个首页' 的 HttpResponse 对象作为响应
    return HttpResponse('这是一个首页')

# 定义一个名为 data 的视图函数,接收一个名为 request 的参数,表示用户的 HTTP 请求对象
def data(request):
    # 在视图函数中,返回一个包含字符串 '数据信息' 的 HttpResponse 对象作为响应
    return HttpResponse('数据信息')
python 复制代码
# Project 项目中的 urls.py
from django.urls import path,include  # 导入 Django 的 path 函数,用于配置 URL 路由,include 函数,用于将其它 URL 模式包含在当前 URL 配置中

# URL 配置列表,定义了网站的所有 URL 路径和对应的处理程序
urlpatterns = [
    # 配置 URL 路由
    path('', include('users.urls'))
]
python 复制代码
# users 子应用的 urls.py
from django.urls import path  # 导入 Django 的 path 函数,用于配置 URL 路由
from .import views  # 导入当前目录下的 views.py 文件中的模块或视图函数

# URL 配置列表,定义 URL 路径和对应的处理程序
urlpatterns = [
    # 配置 URL 路由,调用 views.py 中的 tests 视图函数
    path('tests/', views.tests),
    # 配置 URL 路由,调用 views.py 中的 index 视图函数
    path('index/', views.index),
    # 配置 URL 路由,调用 views.py 中的 data 视图函数
    path('data/', views.data),
]

manage.py 文件下运行代码,分别访问网址

http://127.0.0.1:8000/tests/,http://127.0.0.1:8000/index/,http://127.0.0.1:8000/data/

显示以下页面。

3、路由解析顺序

3.1、请求到达 Django 应用程序

当用户在浏览器中输入 URL 并发送 HTTP 请求时,请求首先到达 Django 应用程序。

3.2、Django 根据 URL 路径查找匹配的路由

Django 会遍历项目中定义的 urlpatterns 列表,从上到下逐个检查 URL 模式。它会按照列表中的顺序进行匹配。

3.3、第一个匹配的 URL 模式被选中

一旦 Django 找到与请求的 URL 路径匹配的 URL 模式,它将停止查找,选择第一个匹配的模式。模式匹配是基于正则表达式和路径转换器进行的。

3.4、相关联的视图函数被调用

一旦找到匹配的 URL 模式,Django 将执行与该模式关联的视图函数。这个视图函数将处理 HTTP 请求,并返回 HTTP 响应。

3.5、如果没有匹配的模式,Django 返回404错误

如果 Django 无法找到与请求匹配的 URL 模式,它将返回 HTTP 404 错误,表示页面未找到。

4、访问流程

访问流程是指用户通过浏览器或其它 HTTP 客户端访问一个网站或 Web 应用程序时所经历的一系列步骤。

4.1、用户输入 URL

用户在浏览器的地址栏中输入要访问的网站的 URL(统一资源定位符)。URL 是一个唯一的标识,指示浏览器请求哪个特定的 Web 页面或资源。

4.2、DNS 解析

浏览器首先将 URL 发送给 DNS(域名系统)服务器,以获取与 URL 中的域名相对应的 IP 地址。DNS 将域名解析为 IP 地址,使浏览器能够与服务器建立连接。

4.3、建立 TCP 连接

浏览器使用获取到的 IP 地址与 Web 服务器建立 TCP(传输控制协议)连接。TCP 是一种可靠的协议,用于确保数据在客户端和服务器之间的可靠传输。

4.4、发送 HTTP 请求

一旦建立了 TCP 连接,浏览器将 HTTP 请求发送到服务器。HTTP 请求包括请求方法(例如GET、POST)、请求头(包括用户代理、Cookie 等信息)以及 URL 路径等。

4.5、服务器处理请求

服务器接收到 HTTP 请求后,根据请求中的 URL 和其它信息,确定应该执行哪个处理程序或视图函数来生成响应。这通常涉及到路由解析、请求处理和数据检索等步骤。

4.6、生成 HTTP 响应

服务器执行相应的处理程序或视图函数,生成 HTTP 响应。响应包括状态码(例如200表示成功、404表示未找到)、响应头(包括内容类型、日期等信息)以及响应体(包括 HTML、JSON、图像等实际内容)。

4.7、发送 HTTP 响应

服务器将生成的 HTTP 响应发送回浏览器,通过建立的 TCP 连接传输给客户端。

4.8、浏览器渲染页面

一旦浏览器接收到 HTTP 响应,它会根据响应中的 HTML、CSS 和 JavaScript 等内容来渲染页面。浏览器会解析 HTML 并构建页面的 DOM(文档对象模型),然后将 CSS 应用于页面,最后执行 JavaScript 代码。

4.9、用户与页面交互

用户可以在渲染后的页面上与其进行交互,例如点击链接、填写表单、提交数据等。

4.10、结束连接

一旦页面被完全渲染并且用户与页面交互完毕,浏览器和服务器之间的 TCP 连接可能会保持一段时间(保持连接状态),以便更快地加载其它页面资源。最终,连接会关闭。

5、路由命名和命名空间

5.1、路由命名

路由命名 是为 URL 模式分配易于识别的名称的技术,使代码更易读和维护。

可以在定义 URL 模式时使用 name 参数来为模式分配名称。这个名称是唯一的,用于标识特定的 URL 模式。

python 复制代码
# urls.py
# 定义 URL 模式列表
urlpatterns = [
    # 使用 path() 函数定义 URL 模式
    # 当用户访问 'articles/' 路径时,将调用 views.article_list 视图函数
    # 'article-list' 是此 URL 模式的名称,可用于反解析 URL
    path('articles/', views.article_list, name='article-list'),

    # 使用 path() 函数定义 URL 模式,但包含一个动态整数参数 'article_id'
    # <int:article_id> 表示将匹配一个整数,并将其传递给视图函数
    # 当用户访问 'articles/1/' 这样的路径时,将调用 views.article_detail 视图函数,
    # 并将匹配到的整数作为 'article_id' 参数传递给视图函数
    # 'article-detail' 是此 URL 模式的名称,可用于反解析 URL
    path('articles/<int:article_id>/', views.article_detail, name='article-detail'),
]

在模板和视图中,可以使用这些名称引用 URL,而不必硬编码 URL 路径。

html 复制代码
<!-- 创建超链接到文章列表页 -->
<a href="{% url 'article-list' %}">查看文章列表</a>

<!-- 创建超链接到文章详情页,同时传递了参数 article_id=1 -->
<a href="{% url 'article-detail' article_id=1 %}">查看文章详情</a>

5.2、命名空间

命名空间 是一种组织 URL 模式的方法,特别适用于多个应用程序之间共享 URL 时,以防止 URL 名称冲突。在 Django 中,可以为每个应用程序定义自己的 URL 命名空间,并在项目级的路由配置中使用它。

python 复制代码
# urls.py
# 定义 URL 模式列表
urlpatterns = [
    # 使用 path() 函数定义一个 URL 模式,将'/blog/'路径与'blog'应用的 URL 配置关联
    # 'include'函数用于包含另一个应用的 URL 配置,'namespace'指定了这个应用的命名空间
    path('blog/', include('blog.urls', namespace='blog')),

    # 使用 path() 函数定义另一个 URL 模式,将'/news/'路径与'news'应用的 URL 配置关联
    # 'include'函数用于包含另一个应用的 URL 配置,'namespace'指定了这个应用的命名空间
    path('news/', include('news.urls', namespace='news')),
]

在模板或视图中使用命名空间来引用 URL。

html 复制代码
<!-- 创建超链接到 'blog' 应用的 'article-detail' 视图 -->
<a href="{% url 'blog:article-detail' %}">Blog Article Detail</a>

<!-- 创建超链接到 'news' 应用的 'article-detail' 视图 -->
<a href="{% url 'news:article-detail' %}">News Article Detail</a>

使用命名空间,Django 能够区分两个具有相同名称的命名路由,以确保生成正确的 URL。

6、resverse 反解析

在 Django 中,reverse() 函数是用于 URL 反解析(URL Reverse Resolution)的重要工具。

URL 反解析 是指根据视图函数的名称或 URL 模式的名称生成相应的 URL,以便在应用程序中构建 URL 链接或重定向到其它页面。

reverse() 函数的主要作用是根据路由名称生成 URL。

语法

python 复制代码
from django.urls import reverse
reverse('route_name', args=(), kwargs={}, **extra)
  • route_name:要反解析的路由名称,即在 urls.py 中为路由模式分配的名称。
  • args:一个包含路由模式中的位置参数的元组。
  • kwargs:一个包含路由模式中的关键字参数的字典。
  • **extra:额外的参数,通常不需要。

示例

路由模式和视图函数:

python 复制代码
# urls.py
# 定义 URL 模式列表
urlpatterns = [
    # 使用 path() 函数定义 URL 模式
    # 当用户访问 'articles/' 路径时,将调用 views.article_list 视图函数
    # 'article-list' 是此 URL 模式的名称,可用于反解析 URL
    path('articles/', views.article_list, name='article-list'),

    # 使用 path() 函数定义 URL 模式,但包含一个动态整数参数 'article_id'
    # <int:article_id> 表示将匹配一个整数,并将其传递给视图函数
    # 当用户访问 'articles/1/' 这样的路径时,将调用 views.article_detail 视图函数,
    # 并将匹配到的整数作为 'article_id' 参数传递给视图函数
    # 'article-detail' 是此 URL 模式的名称,可用于反解析 URL
    path('articles/<int:article_id>/', views.article_detail, name='article-detail'),
]

可以使用 reverse() 函数来反解析这些路由名称并生成相应的 URL:

python 复制代码
# 导入 reverse 函数,用于生成 URL
from django.urls import reverse

# 使用 reverse 函数生成文章列表页面的 URL,'article-list'是 URL 名称
article_list_url = reverse('article-list')
# 结果将是'/articles/'

# 使用 reverse 函数生成文章详情页面的 URL,'article-detail'是 URL 名称,args 参数传递了文章 ID 为1
article_detail_url = reverse('article-detail', args=[1])
# 结果将是'/articles/1/'

优势

可以根据名称动态生成URL,这在构建链接、重定向和动态生成 URL 时非常有用,特别是在项目的不同部分之间共享 URL 时,可以确保 URL 的一致性和可维护性。

记录学习过程,欢迎讨论交流,尊重原创,转载请注明出处~

相关推荐
秀儿还能再秀28 分钟前
机器学习——简单线性回归、逻辑回归
笔记·python·学习·机器学习
阿_旭1 小时前
如何使用OpenCV和Python进行相机校准
python·opencv·相机校准·畸变校准
幸运的星竹1 小时前
使用pytest+openpyxl做接口自动化遇到的问题
python·自动化·pytest
Tttian6222 小时前
Vue全栈开发旅游网项目(11)-用户管理前端接口联调
前端·vue.js·django
kali-Myon3 小时前
ctfshow-web入门-SSTI(web361-web368)上
前端·python·学习·安全·web安全·web
B站计算机毕业设计超人3 小时前
计算机毕业设计Python+大模型农产品价格预测 ARIMA自回归模型 农产品可视化 农产品爬虫 机器学习 深度学习 大数据毕业设计 Django Flask
大数据·爬虫·python·深度学习·机器学习·课程设计·数据可视化
布鲁格若门3 小时前
AMD CPU下pytorch 多GPU运行卡死和死锁解决
人工智能·pytorch·python·nvidia
AI原吾3 小时前
探索 Python HTTP 的瑞士军刀:Requests 库
开发语言·python·http·requests