刚开始学习培训Django的初学者注意了,这儿汇总了十条留意点,可以协助你更快的学习培训Django,降低错误,防止迷失方向,很值得一看哦~~
1,不必将项目规划包括在引入编码里
例如你建立了一个名叫"project"的新项目,包括一个名叫"app"的运用,那麼如下所示编码是不行的:
from project.app.models import Author
缺陷取决于:运用和新项目变成了紧藕合,没法将运用随便越来越可器重。假如未来要换一个项目规划,那么你会有得受了。
强烈推荐的作法是:
from app.models import Author
一定要注意,你需要将新项目的途径配备在PYTHONPATH中。
2,不必硬编码MEDIA_ROOT和TEMPLATE_DIRS
新项目环境变量settings.py中不能应用如下所示编码:
TEMPLATE_DIRS = ( \"/home/html/project/templates\",) MEDIA_ROOT = \"/home/html/project/appmedia/\"
如果你在布署到工作环境,或是转移网络服务器的情况下,便会产生问题。
强烈推荐应用如下所示方法:
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或照片的情况下,不建议应用如下所示方法:
<link rel=\"stylesheet\" type=\"text/css\" href=\"/appmedia/amazing.css\" /> <script type=\"text/javascript\" src=\"/appmedia/jquery.min.js\"></script>
如果你的新项目必须将静态数据文档用别的网络服务器带来的情况下,通常会是此外一个http详细地址,那麼你也就得把任何的/appmedia/换成新的详细地址,建立网站敲代码早已够枯燥的了。
沒有顾虑的处理方法是应用{{ MEDIA_URL }}替代硬编码的途径:
<link rel=\"stylesheet\" type=\"text/css\" href=\"{{ MEDIA_URL }}amazing.css\" /> <script type=\"text/javascript\" src=\"{{ MEDIA_URL }}jquery.min.js\"></script>
模版前后文自变量怎么获取到呢?请应用RequestContext就可以:
return render_to_response(\"app/template.html\", {\'var\': \'foo\'}, context_instance=RequestContext(request))
从RequestContext里还能够获得到当今客户等信息内容
4,不必将领域模型编码写到主视图里
不必蒙蔽,尽管你很有可能看了许多书和事例,他们把逻辑性都写在了views.py里,但你要别那么做。由于那样不利单元测试卷,不利器重编码。
那么我的领域模型应当放哪儿呢?强烈推荐放进实体模型里或是独立创建一个輔助(helper)控制模块。
自然,从实体模型获得一个Author,获取Author目录的源代码是可以放进主视图里边的。
5,布署时别忘了将DEBUG设置成False
大家经常忘掉在布署时禁止使用DEBUG,有很很多种方式全自动来解决这一配备:
import socket if socket.gethostname() == \'productionserver.com\': DEBUG = False else: DEBUG = True
另一种方式是采用不一样的环境变量:
#文件夹名称:settings_debuy.py #包括开发者模式的配备信息内容 #http://www.pythontab.com #应用python manage.py runserver settings=settings_debug.py来运作新项目 from settings import * DEBUG = True #还能够配备大量在调节时运用的自变量:)
6,只载入一次自定的模版标识
当必须应用自定或是第三方的模版标识和模版过滤装置时,通常要在模版中应用:
{% load template_tags %}
具体情况是,必须在全部使用自定模版标识和模版过滤装置的模版里都应用上边的编码,那样也不DRY了。
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文件中,例如:
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中,那样可以使运用更非常容易多次重复使用到不一样新项目里:
urlpatterns = patterns(\'\', (r\'^$\', include(\'institution.urls\')), (r\'^institution/\', include(\'institution.urls\')), (r\'^askalumini/\', include(\'askalumini.urls\')), (r\'^member/\', include(\'member.urls\')), )
如下所示是运用askalumini的urls.py:
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文件中有如下所示编码:
HttpResponseRedirect(\"/askalumini/questions/54\")
请改成:
from django.core.urlresolvers import reverse HttpResponseRedirect(reverse(\'askquestiondisplay\',kwargs={\'questionno\':q.id}))
在实体模型中应用models.permalink装饰器来文件格式url:
@models.permalink def get_absolute_url(self): return (\'profileurl2\',(),{\'userid\': self.user.id})
在模版使得用url标识替代硬编码:
{% 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调试专用工具
生成模型数据图表,你能展现让你的老总
……
做猪小侠源码的代理,提供一站式服务
如果你不懂得搭建网站或者服务器,小程序,源码之类的怎么办? 第一通过本站学习各种互联网的技术 第二就是联系客服,我帮帮你搭建(当然要收取部分的费用) 第三成为我们的代理,我们提供整套的服务。