Django使用心得(三)

简介:

本篇主要讲解如何将可复用的功能作成独立的App,并从主Project中分离出来,便于以后加入到任意Project中。

下面以一个简单的例子来说明如何物理上分离各个可复用的App

  • 建立1个主Project和3个子App
  • 简单的实现3个子App
  • 关联主工程和3个子App

1. 建立1个主Project和3个子App

首先建立一个django project,名为siteWithApps。建立方法参见Django使用心得(一)
然后建立3个子工程:(3个子工程没有实际的功能,只是模拟如何在django中分离App)
subApp1: 模拟权限认证功能,认证成功后返回siteWithApps
subApp2: 无实际功能,可返回siteWithApps
subApp3: 无实际功能,可返回siteWithApps

2. 简单的实现3个子App

3个子App的建立也非常简单,只需建立一个文件夹,然后在文件夹中新建3个空文件,文件名分别为__init__.py,urls.py,views.py,本次不涉及数据库,所以没有建立models.py。
注意,这里为了从物理上也分离这3个App,将这3个App放在与siteWithApps不同文件夹中了。整个工程的文件夹结构请参照本文最后的部分。

3个子App分别独立实现,与主Project没有任何联系,方便移植到其他Project中复用。
代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# subApp1:
 
# file : views.py
 
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
from  django.shortcuts import  render_to_response
 
 
def  Login( request ):
 
     name =  request.POST.get( 'user_name' , '' )
     pwd =  request.POST.get( 'user_pass' , '' )
     result =  False
     if  name = =  'admin'  and  pwd = =  '123' :
         result =  True
 
     return  render_to_response( 'subApp1/check_login.html' ,
             { 'user_name'  : name,
               'user_pass' : pwd,
               'result'  : result
             })
 
 
# file : urls.py
 
from  django.conf.urls.defaults import  *
 
urlpatterns =  patterns('',
     (r '^$' , 'subApp1.views.Login'  ),
 
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# subApp2:
 
# file: views.py
 
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
from  django.shortcuts import  render_to_response
 
def  App( request ):
     return  render_to_response( 'subApp2/subApp2.html'  )
 
 
# file: urls.py
 
from  django.conf.urls.defaults import  *
 
urlpatterns =  patterns('',
     (r '^$' , 'subApp2.views.App'  ),
 
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# subApp3:
 
# file: views.py
 
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
from  django.shortcuts import  render_to_response
 
def  App( request ):
     return  render_to_response( 'subApp3/subApp3.html'  )
 
 
# file: urls.py
 
from  django.conf.urls.defaults import  *
 
urlpatterns =  patterns('',
     (r '^$' , 'subApp3.views.App'  ),
 
)

3. 关联主工程和3个子App

通过主Project的urls.py,与3个子App关联起来。耦合性非常低,可以方便的追加新的App或删除已有的App。
主Project的urls.py如下:

1
2
3
4
5
6
7
8
9
10
from  django.conf.urls.defaults import  *
 
urlpatterns =  patterns('',
     (r '^siteWithApps/$' , 'siteWithApps.views.Init'  ),
     (r '^siteWithApps/apps/$' , 'siteWithApps.views.Contents'  ),
 
     (r '^siteWithApps/logincheck/$' , include( 'subApp1.urls' ) ),
     (r '^siteWithApps/app2/$' , include( 'subApp2.urls' ) ),
     (r '^siteWithApps/app3/$' , include( 'subApp3.urls' ) ),
)

需要注意的一点是,为了能识别位于不同文件夹下的子App,需要在主Project的settings.py开始部分加入下面一段。

1
2
3
4
5
6
7
8
# add for add isolate app
import  sys
 
def  AddToPythonPath():
     sys.path.append(r "D:/vim/python/django/django-apps/" )
 
AddToPythonPath()
# end for add

这样urls.py中的include就不会报错了。

主Project和子App的template如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// file : siteWithApps->base.html
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
     <head>
         <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
         <title>{% block title %}{% endblock %}</title>
     </head>
     <body>
         {% if result %}
         <a href="/siteWithApps/apps/"><h2>Go to Avilable APPS</h2></a>
         {% else %}
         <form action="/siteWithApps/logincheck/" method="post">
             <label for="user_name">用户名:</label>
             <input type="text" id="user_name" name="user_name" />
             <label for="user_pass">密码  :</label>
             <input type="text" id="user_pass" name="user_pass" />
             <br />
 
             <input type="submit" value="登录" />
         </form
         {% endif %}
         {% block login_result %}{% endblock %}
 
     </body>
</html>
 
// file : siteWithApps->apps.html
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
     <head>
         <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
         <title>{% block title %}{% endblock %}</title>
     </head>
     <body>
     <h2>Go to Avilable APPS</h2>
         <ul>
             <li>
                 <a href="/siteWithApps/app2/">subApp2</a>
             </li>
             <li><a href="/siteWithApps/app3/">subApp3</a></li>
         </ul>
         {% block subApp %}{% endblock %}
     </body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// file : subApp1->check_login.html
 
{% extends "siteWithApps/base.html"  %}
 
{% block title %}LoginCheck{% endblock %}
 
{% block login_result %}
<h2>输入的用户名和密码分别为:{{ user_name }} 和 {{ user_pass }}</h2>
<label for="login_result">登录结果:</label>
{% if result %}
<h1>登录成功</h1>
{% else %}
<h1>登录失败</h1>
{% endif %}
{% endblock %}
1
2
3
4
5
6
7
8
// file : subApp2->subApp2.html
 
{% extends "siteWithApps/apps.html"  %}
{% block title %}subApp 2{% endblock %}
 
{% block subApp %}
<h1>This sub App 2</h1>
{% endblock %}
1
2
3
4
5
6
7
8
// file : subApp3->subApp3
 
{% extends "siteWithApps/apps.html"  %}
{% block title %}subApp 3{% endblock %}
 
{% block subApp %}
<h1>This sub App 3</h1>
{% endblock %}

整个工程的目录如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
D:\Vim\python\django
     |-django-apps
     |     |
     |     |-subApp1
     |     |     |-urls.py
     |     |     |-views.py
     |     |     `-__init__.py
     |     |
     |     |-subApp2
     |     |     |-urls.py
     |     |     |-views.py
     |     |     `-__init__.py
     |     |
     |     `-subApp3
     |           |-urls.py
     |           |-views.py
     |           `-__init__.py
     |
     |-django-templates
     |     |-siteWithApps
     |     |     |-apps.html
     |     |     `-base.html
     |     |
     |     |-subApp1
     |     |     `-check_login.html
     |     |
     |     |-subApp2
     |     |     `-subApp2.html
     |     |
     |     `-subApp3
     |           `-subApp3.html
     |
     `-siteWithApps
           |-manage.py
           |-settings.py
           |-urls.py
           |-views.py
           `-__init__.py


本文转自wang_yb博客园博客,原文链接:http://www.cnblogs.com/wang_yb/archive/2011/04/30/2033373.html,如需转载请自行联系原作者
目录
相关文章
|
MySQL 关系型数据库 数据库
|
Web App开发 JavaScript 前端开发
|
Web App开发 Python
|
3月前
|
Linux 数据库 数据安全/隐私保护
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
106 1
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
721 4
|
10月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
599 45
|
12月前
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
400 22
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
12月前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
456 7
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
10月前
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
336 2
|
前端开发 搜索推荐 算法
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
中草药管理与推荐系统。本系统使用Python作为主要开发语言,前端使用HTML,CSS,BootStrap等技术和框架搭建前端界面,后端使用Django框架处理应用请求,使用Ajax等技术实现前后端的数据通信。实现了一个综合性的中草药管理与推荐平台。具体功能如下: - 系统分为普通用户和管理员两个角色 - 普通用户可以登录,注册、查看物品信息、收藏物品、发布评论、编辑个人信息、柱状图饼状图可视化物品信息、并依据用户注册时选择的标签进行推荐 和 根据用户对物品的评分 使用协同过滤推荐算法进行推荐 - 管理员可以在后台对用户和物品信息进行管理编辑
420 12
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发

热门文章

最新文章