![45. Django 2.1.7 项目技巧 - 创建apps应用目录归纳所有应用_Python](https://s2.51cto.com/images/blog/202106/18/01a3a5eeecf4e3fd44feb0cbf6f0658e.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
问题描述
在正式编写django项目的时候,初始使用是直接创建了应用之后,没有进行归纳就开始直接使用了。
假设我有四个应用用户、商品、订单、购物车,直接创建之后的文档结构如下:
![45. Django 2.1.7 项目技巧 - 创建apps应用目录归纳所有应用_Django教程_02](https://s2.51cto.com/images/blog/202106/18/d1095222f99f2781849dc4f6be1f062d.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
除开应用的目录,还有其他文档docs目录、项目的dailyfresh目录,全部在一个层级就会比较混乱。
那么有没有一个好方法来处理一下呢?
解决问题 - 创建apps目录来归纳应用
可以创建一个apps的目录,将应用全部拖入,注意拖入apps的时候要去除pycharm查询相关关联的操作。
![45. Django 2.1.7 项目技巧 - 创建apps应用目录归纳所有应用_Django教程_03](https://s2.51cto.com/images/blog/202106/18/bbd55a2614369b0135fb68c87ed540e7.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
文档结构如下:
![45. Django 2.1.7 项目技巧 - 创建apps应用目录归纳所有应用_Python_04](https://s2.51cto.com/images/blog/202106/18/0be2d9e0f03d1f568fff472b54ad2b79.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
这样划分归纳之后,文档结构就比较清晰了。但是这样做也带来了一个问题,就是应用的路径问题。
需要在项目/settings配置路径,如下:
![45. Django 2.1.7 项目技巧 - 创建apps应用目录归纳所有应用_Django教程_05](https://s2.51cto.com/images/blog/202106/18/7e5b5784cb9e4c5fa08a0493f196a75f.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
# 设置apps路径
import sys
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
之前配置urls.py或者注册应用,都是直接应用名就可以了,现在也只是需要在前面加上apps路径即可,例如:apps.goods.urls,在下面设置了对应目录和路径之后,就可以直接配置goods.urls了。
在pycharm设置源码目录以及模板目录
- 设置apps目录为源码目录
![45. Django 2.1.7 项目技巧 - 创建apps应用目录归纳所有应用_Django教程_06](https://s2.51cto.com/images/blog/202106/18/27610051bf2b08e9e6995413e2e431d9.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
- 设置templates目录为模板目录
![45. Django 2.1.7 项目技巧 - 创建apps应用目录归纳所有应用_Python_07](https://s2.51cto.com/images/blog/202106/18/1f4388b72c70204e6b90379ea60b08de.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
注册应用的示例
进入项目目录下的settings.py配置文件中,如下:
![45. Django 2.1.7 项目技巧 - 创建apps应用目录归纳所有应用_Django教程_08](https://s2.51cto.com/images/blog/202106/18/72fc6f37ede1c580b107867ea0a31fce.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
INSTALLED_APPS = (
'user.apps.UserConfig', # 注册用户模块应用
'cart.apps.CartConfig', # 注册购物车应用
'goods.apps.GoodsConfig', # 注册商品应用
'order.apps.OrderConfig', # 注册订单应用
...
)
配置静态文件目录
- 创建static文件夹
![45. Django 2.1.7 项目技巧 - 创建apps应用目录归纳所有应用_Django教程_09](https://s2.51cto.com/images/blog/202106/18/08b532e7664fa263490ba7d00079a08b.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
- 在项目/settings配置静态文件路径
![45. Django 2.1.7 项目技巧 - 创建apps应用目录归纳所有应用_Django教程_10](https://s2.51cto.com/images/blog/202106/18/9517f8b1d319db754787b57f2f0728ac.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
- 将html模板文件拷贝进入static目录中
![45. Django 2.1.7 项目技巧 - 创建apps应用目录归纳所有应用_Django教程_11](https://s2.51cto.com/images/blog/202106/18/27a7e8bab040e05c2056c4f0dba75184.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
- 启动服务,查看static文件
执行python3 manage.py runserver,访问注册模板页面,如下:
http://127.0.0.1:8000/static/register.html
![45. Django 2.1.7 项目技巧 - 创建apps应用目录归纳所有应用_Django教程_12](https://s2.51cto.com/images/blog/202106/18/396d6dd7f5b251ab0598e4a8050539a8.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
设置模板文件
- 创建templates 文件夹
![45. Django 2.1.7 项目技巧 - 创建apps应用目录归纳所有应用_Python_13](https://s2.51cto.com/images/blog/202106/18/19f085def2ef42c1d25c3f42508132a1.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
- 在项目/settings配置模板文件路径,设置TEMPLATES的DIRS值,如下:
'DIRS': [os.path.join(BASE_DIR, 'templates')],
![45. Django 2.1.7 项目技巧 - 创建apps应用目录归纳所有应用_Django教程_14](https://s2.51cto.com/images/blog/202106/18/f0ade5028195d897b7a9a246949e07af.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
- 将static中的register.html移动到templates目录下
![45. Django 2.1.7 项目技巧 - 创建apps应用目录归纳所有应用_Python_15](https://s2.51cto.com/images/blog/202106/18/9c9fefeb7674061a1cdbb760e47c27f1.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
移动的时候勾选相关改动,方便自动修改静态文件css\js路径的修改。
![45. Django 2.1.7 项目技巧 - 创建apps应用目录归纳所有应用_Python_16](https://s2.51cto.com/images/blog/202106/18/151fd5dae13f454f73e1af8b6d12d6fc.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
好了,下一步创建一个视图,来映射这个模板。
设置应用的urls示例
下面使用用户模块创建一个视图,然后配置urls作为示例,如下:
1)在应用users.view.py创建register视图,如下:
![45. Django 2.1.7 项目技巧 - 创建apps应用目录归纳所有应用_Django教程_17](https://s2.51cto.com/images/blog/202106/18/698c7b9c7e20ec634a58a0a6fcce5b03.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
2)创建user应用的urls.py文件,配置如下:
![45. Django 2.1.7 项目技巧 - 创建apps应用目录归纳所有应用_Django教程_18](https://s2.51cto.com/images/blog/202106/18/f4d8876defcb6401c8a26790902d5ba7.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
from django.urls import path
from . import views
app_name = 'user' # 设置命名空间
urlpatterns = [
# ex:/user/register
path('register', views.register, name='register'),
]
3)在项目的urls.py文件中加入应用的urls,如下:
![45. Django 2.1.7 项目技巧 - 创建apps应用目录归纳所有应用_Python_19](https://s2.51cto.com/images/blog/202106/18/3849e0e2ce31ffe6dc6a375b82f51c38.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('user/', include('user.urls')), # 导入user应用的urls.py
path('admin/', admin.site.urls),
]
4) 启动服务,访问register视图
http://127.0.0.1:8000/user/register
![45. Django 2.1.7 项目技巧 - 创建apps应用目录归纳所有应用_Django教程_20](https://s2.51cto.com/images/blog/202106/18/c940317e7d00893f97003634b8f78c9c.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
到这里说明增加了apps目录也可以正常工作访问视图了。