urls.py、INSTALLED_APPS、apps.py 的不同 django rest 方法
Different django rest approach for urls.py, INSTALLED_APPS, apps.py
在 Whosebug 和 https://docs.djangoproject.com/en/3.2/ref/applications/#configuring-applications 中阅读了一些类似的主题,我仍然面临理解处理 url 的正确方法的问题。我正在关注两个 REST API 教程,它们在 urls.py、settings.py、apps.py 文件方面彼此不同。
具有这样的结构:
├───my_project
│ └───api
│ ├───apps.py
| └───urls.py
│ └───my_project
| ├───urls.py
| └───settings.py
| └───manage.py
教程 #1
my_project\api\apps.py
从 django.apps 导入 AppConfig
class API配置(应用配置):
default_auto_field = "django.db.models.BigAutoField"
<b>name = "api"</b> ########### 差异
my_project\api\urls.py
来自 django.urls 导入包含,路径
来自 rest_framework 导入路由器
从 。导入视图
路由器 = routers.DefaultRouter()
router.register(前缀="symbols", viewset=views.SymbolsViewSet)
<b>urlpatterns = [</b> ########### 差异
<b> 路径("", include(router.urls)),</b> ########### 差异
<b>]</b> ########### 差异
my_project\my_project\urls.py
来自 django.contrib 导入管理员
来自 django.urls 导入路径,包括
网址模式 = [
路径("admin/",admin.site.urls),
<b>path("api/", include("api.urls")),</b> ########### 差异
]
my_project\my_project\settings.py
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"rest_framework",
<b>"api",</b> ########### 差异
]
教程 #2
my_project\api\apps.py
从 django.apps 导入 AppConfig
class API配置(应用配置):
default_auto_field = "django.db.models.BigAutoField"
<b>name = "my_project.my_project.api"</b> ########### 差异
my_project\api\urls.py
来自 rest_framework 导入路由器
从 。导入视图
路由器 = routers.DefaultRouter()
router.register(前缀="symbols", viewset=views.SymbolsViewSet)
<b>########### DIFF 缺少 3 行</b>
my_project\my_project\urls.py
来自 django.contrib 导入管理员
来自 django.urls 导入路径,包括
来自 my_project.my_project.api.urls 导入路由器
网址模式 = [
路径("admin/",admin.site.urls),
<b>path("api/", include(router.urls)),</b> ########### 差异
]
my_project\my_project\settings.py
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"rest_framework",
<b>"my_project.my_project.api",</b>
]
我已经放了
########### DIFF
where files are different and bolded text.
所以主要的有趣区别在于文件 my_project\my_project\urls.py
- 为什么有时是 api 有时是完整路径 my_project.my_project.api?
- 我应该始终使用完整路径还是短路径?
- 为什么在第一篇教程中我们在 my_project\api\urls.py 中使用了 urlpatterns 而不是在教程 #2 中?
- 本教程中的哪一个更接近最佳实践?
- 为什么我们有一次
path("api/", include("api.urls")),
or
path("api/", include(router.urls)),
要从 include 中获取相同的 return,我需要:
include("my_project.my_project.api.urls")[0].router.urls[0]
第二个
router.urls[0]
为什么“api.urls”有效?
希望一些问题清楚,感谢您的任何提示和帮助!祝你有美好的一天!
我们在主目录中使用“include”,我们为应用程序创建了另一个 urls.py。
我个人更喜欢 urls.py 每个应用程序单独包含在主目录中。
想象一下,您想与某人共享此应用程序或将其发布到 pip 或在另一个项目中重新使用它,将所有功能的应用程序及其所有 url 和资源放在一个文件夹中再现实不过了。
在 Whosebug 和 https://docs.djangoproject.com/en/3.2/ref/applications/#configuring-applications 中阅读了一些类似的主题,我仍然面临理解处理 url 的正确方法的问题。我正在关注两个 REST API 教程,它们在 urls.py、settings.py、apps.py 文件方面彼此不同。
具有这样的结构:
├───my_project
│ └───api
│ ├───apps.py
| └───urls.py
│ └───my_project
| ├───urls.py
| └───settings.py
| └───manage.py
教程 #1
my_project\api\apps.py
从 django.apps 导入 AppConfig
class API配置(应用配置):
default_auto_field = "django.db.models.BigAutoField"
<b>name = "api"</b> ########### 差异
my_project\api\urls.py
来自 django.urls 导入包含,路径
来自 rest_framework 导入路由器
从 。导入视图
路由器 = routers.DefaultRouter()
router.register(前缀="symbols", viewset=views.SymbolsViewSet)
<b>urlpatterns = [</b> ########### 差异
<b> 路径("", include(router.urls)),</b> ########### 差异
<b>]</b> ########### 差异
my_project\my_project\urls.py
来自 django.contrib 导入管理员
来自 django.urls 导入路径,包括
网址模式 = [
路径("admin/",admin.site.urls),
<b>path("api/", include("api.urls")),</b> ########### 差异
]
my_project\my_project\settings.py
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"rest_framework",
<b>"api",</b> ########### 差异
]
教程 #2
my_project\api\apps.py
从 django.apps 导入 AppConfig
class API配置(应用配置):
default_auto_field = "django.db.models.BigAutoField"
<b>name = "my_project.my_project.api"</b> ########### 差异
my_project\api\urls.py
来自 rest_framework 导入路由器
从 。导入视图
路由器 = routers.DefaultRouter()
router.register(前缀="symbols", viewset=views.SymbolsViewSet)
<b>########### DIFF 缺少 3 行</b>
my_project\my_project\urls.py
来自 django.contrib 导入管理员
来自 django.urls 导入路径,包括
来自 my_project.my_project.api.urls 导入路由器
网址模式 = [
路径("admin/",admin.site.urls),
<b>path("api/", include(router.urls)),</b> ########### 差异
]
my_project\my_project\settings.py
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"rest_framework",
<b>"my_project.my_project.api",</b>
]
我已经放了
########### DIFF where files are different and bolded text.
所以主要的有趣区别在于文件 my_project\my_project\urls.py
- 为什么有时是 api 有时是完整路径 my_project.my_project.api?
- 我应该始终使用完整路径还是短路径?
- 为什么在第一篇教程中我们在 my_project\api\urls.py 中使用了 urlpatterns 而不是在教程 #2 中?
- 本教程中的哪一个更接近最佳实践?
- 为什么我们有一次
path("api/", include("api.urls")),
or
path("api/", include(router.urls)),
要从 include 中获取相同的 return,我需要:
include("my_project.my_project.api.urls")[0].router.urls[0]
第二个
router.urls[0]
为什么“api.urls”有效?
希望一些问题清楚,感谢您的任何提示和帮助!祝你有美好的一天!
我们在主目录中使用“include”,我们为应用程序创建了另一个 urls.py。
我个人更喜欢 urls.py 每个应用程序单独包含在主目录中。
想象一下,您想与某人共享此应用程序或将其发布到 pip 或在另一个项目中重新使用它,将所有功能的应用程序及其所有 url 和资源放在一个文件夹中再现实不过了。