Python 让django 1.10 API在调试中提供静态HTML内容的正确方法是什么?
我试图构建一个简单的单页web应用程序,其中web服务器只提供静态内容,除非路由以“/api”开头,在这种情况下,请求被路由到django 文件结构如下:Python 让django 1.10 API在调试中提供静态HTML内容的正确方法是什么?,python,django,python-2.7,Python,Django,Python 2.7,我试图构建一个简单的单页web应用程序,其中web服务器只提供静态内容,除非路由以“/api”开头,在这种情况下,请求被路由到django 文件结构如下: 根 -manage.py -静态/(静态内容) -index.html -app.min.js -…等等 -djangoapp/(django“项目”) -_uuuinit_uuuuu.py -设置.py -url.py -wsgi.py -api/(django“应用程序”) -_uuuinit_uuuuu.py -管理员 -apps.p
根
-manage.py
-静态/(静态内容)
-index.html
-app.min.js
-…等等
-djangoapp/(django“项目”)
-_uuuinit_uuuuu.py
-设置.py
-url.py
-wsgi.py
-api/(django“应用程序”)
-_uuuinit_uuuuu.py
-管理员
-apps.py
-models.py
-tests.py
-views.py
在开发过程中(DEBUG=true),我希望django像传统web服务器一样提供静态内容。这意味着不在/api下的内容应该只从/static提供,而“/”的GET应该返回index.html
我已采取以下步骤:
django管理启动项目djangoapp
/manage.py startapp api创建了django“应用程序”
- “静态URL”指向“/”
- 通过
os.path.join(BASE\u DIR,“STATIC”)
GET/dummy.html
的请求不会路由
更改项目的URL.py以包含以下结果时
django.conf.URL.static.static(settings.static\u URL,document\u root=settings.static\u root)
…也不会以任何方式改变行为。只有404
我发现,通过省略STATIC_ROOT值,并将STATICFILES_DIRS值设置为磁盘上的物理文档根,可以成功地服务于静态文件,但会破坏所有其他端点(它们抛出404)
环境:
- Debian jessie(稳定)
- python 2.7.13(通过pyenv安装)
- django 1.10.6(通过pip安装)
逐步说明如何构建将在调试模式下提供静态内容的“/api only”django 1.10
django管理启动项目PROJECTNAME
/manage.py startapp API创建API“app”
mkdir static
创建一个staticfiles文件夹,并用传输/捆绑的web客户端填充它- 从已安装的应用程序数组中删除条目:
django.contrib.staticfiles
- 在TEMPLATES.DIRS数组中添加一个条目:
os.path.join(BASE\u DIR,“static”)
- 将静态URL更改为
静态URL='/'
- 将STATIC\u ROOT更改为
STATIC\u ROOT=os.path.join(BASE\u DIR,“STATIC”)
从django.http导入HttpResponse
def你好(请求):
返回HttpResponse(“{”响应“:“你好,我是API!”}”,“应用程序/json”)
…并在api/URL.py中设置api应用程序的内部路由,如下所示:
从django.conf.url导入url
从…起导入视图
URL模式=[
url(r“^hello$”,views.hello,name='hello'),
]
通过编辑PROJECTNAME/url.py将api应用程序添加到项目的url结构中,如下所示:
从django.conf.url导入包括,url
从django.contrib导入管理
URL模式=[
url(r“^api/”,包括('api.url'),
url(r“^admin/”,admin.site.url),
]
导入操作系统
从django.conf导入设置
从django.conf.url导入包括
从django.conf.url.static导入静态
从django.contrib导入管理
URL模式=[
url(r“^api/”,包括('api.url'),
url(r“^admin/”,admin.site.url),
]
如果设置为.DEBUG:
从django.views.generic.base导入模板视图
urlpatterns+=[url(r'^$',TemplateView.as_view(template_name='index.html'))]
urlpatterns+=静态(settings.static\u URL,document\u root=settings.static\u root,show\u index=True)
…您现在应该能够使用manage.py runserver
在“开发模式”下运行django站点,并让django为您的静态内容提供服务。在生产环境中(DEBUG!=True),这些内容都不会被提供,因为应该由专门提供静态内容的web服务器来处理
- 访问将按预期返回index.html
- 访问返回预期的somefile.html
- 访问按预期返回“hello”api端点的响应
逐步说明如何构建将在调试模式下提供静态内容的“/api only”django 1.10
django-admi创建一个新的django项目