新手学习Django的十条注意点


刚刚开始学习Django的新手注意了,这里总结了十条注意点,能够帮助你更好的学习Django,减少出错,避免走弯路,很值得一看哦~~1,不要将项...

刚刚开始学习Django的新手注意了,这里总结了十条注意点,能够帮助你更好的学习Django,减少出错,避免走弯路,很值得一看哦~~


1,不要将项目名称包含在引用代码里

比如你创建了一个名为"project"的项目,包含一个名为"app"的应用,那么如下代码是不好的:

1
from  project.app.models  import  Author


缺点在于:应用和项目变成了紧耦合,无法将应用轻易变得可重用。如果将来要换一个项目名称,那你可有得受了。

推荐的做法是:

1
from  app.models  import  Author


请注意,你需要将项目的路径配置在PYTHONPATH中。

2,不要硬编码MEDIA_ROOT和TEMPLATE_DIRS

项目配置文件settings.py中不要使用如下代码:

1
2
TEMPLATE_DIRS  =  "/home/html/project/templates" ,) 
MEDIA_ROOT  =  "/home/html/project/appmedia/"


当你在部署到生产环境,或者迁移服务器的时候,就会发生问题。

推荐使用如下方式:

1
2
3
SITE_ROOT  =  os.path.realpath(os.path.dirname(__file__)) 
MEDIA_ROOT  =  os.path.join(SITE_ROOT,  'appmedia'
TEMPLATE_DIRS  =  ( os.path.join(SITE_ROOT,  'templates' ),)


(也可以使用abspath,跟realpath的区别请参考http://rob.cogit8.org/blog/2009/May/05/django-and-relativity-updated/ )

3,不要将静态文件的路径硬编码在模板中

模板中链接CSS,javascript或图片的时候,不建议使用如下方式:

1
2
< link  rel = "stylesheet"  type = "text/css"  href = "/appmedia/amazing.css" />
< script  type = "text/javascript"  src = "/appmedia/jquery.min.js" ></ script >


当你的项目需要将静态文件用其他服务器提供的时候,通常会是另外一个http地址,那么你就得把所有的/appmedia/替换成新的地址,做网站写代码已经够乏味的了。

没有后顾之忧的解决方法是使用{{ MEDIA_URL }}代替硬编码的路径:

1
2
< link  rel = "stylesheet"  type = "text/css"  href = "{{ MEDIA_URL }}amazing.css"  />
     < script  type = "text/javascript"  src = "{{ MEDIA_URL }}jquery.min.js" ></ script >


模板上下文变量怎么获取到呢?请使用RequestContext即可:

1
return  render_to_response( "app/template.html" , { 'var' 'foo' },  context_instance = RequestContext(request))


从RequestContext里还可以获取到当前用户等信息

4,不要将业务逻辑代码写到视图里

不要迷惑,虽然你可能看过很多书和例子,它们把逻辑都写在了views.py里,但请你别这么做。因为这样不利于单元测试,不利于重用代码。

那我的业务逻辑应该放哪里呢?推荐放到模型里或者单独建立一个辅助(helper)模块。

当然,从模型得到一个Author,获取Author列表的代码是可以放到视图里面的。

5,部署时别忘记将DEBUG设置成False

我们常常忘记在部署时禁用DEBUG,有很多种方法自动来处理这个配置:

1
2
3
4
5
6
import  socket 
   
if  socket.gethostname()  = =  'productionserver.com'
     DEBUG  =  False
else
     DEBUG  =  True


另一种途径是使用不同的配置文件:

1
2
3
4
5
6
7
8
9
10
#文件名:settings_debuy.py
#包含调试模式的配置信息
#使用python manage.py runserver settings=settings_debug.py来运行项目
   
from  settings  import  *
   
DEBUG  =  True
   
#还可以配置更多在调试时使用的变量:)


6,只加载一次自定义的模板标签

当需要使用自定义或者第三方的模板标签和模板过滤器时,通常要在模板中使用:

1
{ %  load template_tags  % }


实际情况是,需要在所有用到自定义模板标签和模板过滤器的模板中都使用上面的代码,这样就不DRY了。

1
2
from  django  import  template 
template.add_to_builtins( 'app.templatetags.custom_tag_module' )


请将以上代码放到项目启动时能加载的模块中(settings.py, urls.py, models.py等)即可。

上面代码的作用是在项目启动时就把自定义模板标签或过滤器加载进来,模板中任何一个地方都可以使用它们,而不需要{% load template_tags %}。

7,合理配置和使用URL

不要将URL全都配置在一个urls.py文件中,比如:

1
2
3
4
5
6
7
8
9
10
11
urlpatterns  =  patterns('', 
   url(r '^askalumini/question/$' , '.....registerInstitution' ,name = 'iregister' ), 
   url(r '^askalumin/answer/$' , 'someview.....' ,name = 'newmemberurl' ), 
   url(r '^institution/member/$' , 'someview.....' ,name = "dashboardurl" ), 
   url(r '^institution/faculty/$' , 'editInstitute' ,name = "editinstituteurl" ), 
   url(r '^memeber/editprofile/$' , 'editProfile' ,name = "editprofileurl" ), 
   url(r '^member/changepassword/$' , 'changePassword' ,name = "changepasswordurl" ), 
   url(r '^member/forgotpassword/$' , 'forgotPassword' ,name = "forgotpasswordurl" ), 
   url(r '^member/changepicture/$' , 'changePicture' ,name = "changepictureurl" ), 
   url(r '^member/logout/$' , 'memeberlogout' ,name = "logouturl" ), , 
)


建议的方式是将各应用的URL配置在各自的urls.py中,这样可以使应用更容易重复使用到不同项目里:

1
2
3
4
5
6
urlpatterns  =  patterns('', 
   (r '^$' , include( 'institution.urls' )), 
   (r '^institution/' , include( 'institution.urls' )), 
   (r '^askalumini/' , include( 'askalumini.urls' )), 
   (r '^member/' , include( 'member.urls' )), 
)


如下是应用askalumini的urls.py:

1
2
3
4
5
6
urlpatterns  =  patterns( 'askalumini.views'
   url(r '^$' , 'askHome' ,name = 'askaluminiurl' ), 
   url(r '^questions/(?P<questionno>\d+)/$' , 'displayQuestion' ,name = 'askquestiondisplay' ), 
   url(r '^askquestions/$' , 'askQuestion' ,name = 'askquestionurl' ), 
   url(r '^postcomment/$' , 'postComment' ,name = "askquestioncomment"
)


刚才提到静态文件路径不要硬编码,url的处理方式也尽量不要硬编码,否则当你更改一个地址时会牵涉到多处的修改,可以使用一些url函数来处理。

在/project/askalumini/urls.py中,为每一个url定义了name,它可以帮助我们有效地在视图、模板和模型中处理url,而不是硬编码。

为保证名称的唯一,请遵照将url命名为<appname>/<somelabel>的习惯用法。

举例来说,在views.py文件中有如下代码:

1
HttpResponseRedirect( "/askalumini/questions/54" )


请改为:

1
2
from  django.core.urlresolvers  import  reverse 
HttpResponseRedirect(reverse( 'askquestiondisplay' ,kwargs = { 'questionno' :q. id }))


在模型中使用models.permalink装饰器来格式url:

1
2
3
@models .permalink 
def  get_absolute_url( self ): 
return  ( 'profileurl2' ,(),{ 'userid' self .user. id })


在模板中使用url标签代替硬编码:

1
2
{% url askquestiondisplay 345 %} 
< a  href = "{% url askquestiondisplay 345 %}" > Ask Question </ a >


8,调试

调试通常会借助一些第三方工具来获得更多的运行时信息。

一个请求执行了多少句SQL?花了多长时间?

调用的哪个模板?客户端设置了什么COOKIE?SESSION呢?。。。

你可以使用django-debug-toolbar查看上面甚至更多的信息

另一个工具是Werkzeug debugger,它可以在错误页面打开python shell,让你更方便的跟踪错误信息

还有pdb,一个强大的调试工具:http://ericholscher.com/blog/2008/aug/31/using-pdb-python-debugger-django-debugging-series-/

9,了解pinax备用

django最大的优点是代码重用,DRY,pinax就是这样一个平台,包含了许多可拿来直接使用的代码,比如openid,电子邮件验证等等。请访问:http://pinaxproject.com/

10,了解一些有用的第三方应用

1)数据库升级工具

什么是数据库升级工具?你运行了syncdb,运行了一年之后,对模型做了更改,添加了字段,删除了字段,要再运行syncdb吗?或者ALTER TABLE ...?

django-evolutions可以帮你完成上面的事情,但它好像不够强壮:http://code.google.com/p/django-evolution/

South能很强壮地完成上面的事情,但是需要学学怎么用:http://south.aeracode.org/

2)模板系统

django自带的模板系统是可以替换的,并且各自有优缺点。

template-utils增强了模板的比较标签等功能 ,并提供其他的一些实用特性

Jinja是一个完整的第三方模板系统,可以替换默认模板系统,它提供了许多优越的特性

3)第三方应用

django command extensions提供了很多实用的命令行功能:

shell_plus加载所有django模型

runserver_plus整合了Werkzeug调试工具

生成模型图表,你可以展示给你的老板

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你是新手并且想学习Django框架,以下是一些建议: 1. 入门教程:开始之前,推荐你找一些Django的入门教程,这些教程通常会介绍Django的基本概念和使用方法。一些知名的入门教程包括Django官方文档、Django Girls教程和Mozilla开发者网络(MDN)的Django教程。 2. 安装和设置:在学习Django之前,确保你的计算机已经安装了Python和Django。可以通过官方文档或其他在线教程来学习如何安装和设置Django框架。 3. 官方文档:Django官方文档是学习Django的重要资源。官方文档提供了详细的指南、教程和示例代码,可以帮助你深入了解Django的每个方面。通过阅读官方文档,你可以了解到Django的核心概念、项目结构和常用功能。 4. 练手项目:在学习过程中,尝试做一些小型的练手项目。这样可以帮助你将理论知识应用到实际项目中,并提供更多的实践经验。可以选择一些简单的项目,如个人博客、待办事项列表或简单的社交媒体应用。 5. 社区和论坛:加入Django的社区和论坛,与其他开发者交流和分享经验。这样可以获得更多的学习资源、解决问题的方法,还可以了解到Django的最新动态和技术趋势。 6. 持续学习Django是一个持续发展的框架,新的功能和技术不断推出。因此,要保持对Django学习和更新,关注官方文档和相关的博客、教程和社区资源。 记住,学习Django需要时间和耐心。通过不断练习和实践,你会逐渐掌握这个框架,并能够开发出自己的项目。祝你在学习Django的过程中取得成功!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值