如何解决urls.py、INSTALLED_APPS、apps.py 的不同 django rest 方法
在 stackoverflow 和 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
from django.apps import AppConfig
class ApiConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "api" ########### DIFF
my_project\api\urls.py
from django.urls import include,path
from rest_framework import routers
from . import views
router = routers.DefaultRouter()
router.register(prefix="symbols",viewset=views.SymbolsViewSet)
urlpatterns = [ ########### DIFF
path("",include(router.urls)), ########### DIFF
] ########### DIFF
my_project\my_project\urls.py
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path("admin/",admin.site.urls),path("api/",include("api.urls")), ########### DIFF
]
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","api", ########### DIFF
]
教程#2
my_project\api\apps.py
from django.apps import AppConfig
class ApiConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "my_project.my_project.api" ########### DIFF
my_project\api\urls.py
from rest_framework import routers
from . import views
router = routers.DefaultRouter()
router.register(prefix="symbols",viewset=views.SymbolsViewSet)
########### DIFF Lack of 3 lines
my_project\my_project\urls.py
from django.contrib import admin
from django.urls import path,include
from my_project.my_project.api.urls import router
urlpatterns = [
path("admin/", ########### DIFF
]
my_project\my_project\settings.py
INSTALLED_APPS = [
"django.contrib.admin","my_project.my_project.api",
]
我已经放了
########### DIFF 其中文件是不同的粗体文本。
所以主要有趣的区别在于文件 my_project\my_project\urls.py
- 为什么有时是 api,有时是完整路径 my_project.my_project.api?
- 我应该始终使用完整路径还是短路径?
- 为什么在第一个教程中我们在 my_project\api\urls.py 中使用了 urlpatterns,而不是在教程 #2 中?
- 本教程中哪些更接近最佳实践?
- 为什么我们有一次
path("api/",
或
path("api/",
要从我需要的第一个包含中获得相同的回报:
include("my_project.my_project.api.urls")[0].router.urls[0]
第二个
router.urls[0]
为什么“api.urls”有效?
希望有些问题是清楚的,感谢您的任何提示和帮助!祝你有美好的一天!
解决方法
我们在主目录中使用“include”,我们为应用创建了另一个 urls.py。
我个人更喜欢单独拥有每个应用程序的 urls.py 并将它们包含在主目录中。
想象一下,您想与某人共享此应用程序或将其发布到 pip 或在另一个项目中重复使用它,拥有一个包含所有 url 和资源的全功能应用程序并不会更现实。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。