视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
新手必看:Photoshop笔刷画笔工具基本使用教程 ps抠图后怎么保存 ps怎么保存图片到桌面 ps怎么反向选择 新手怎么使用ps ps盖印图层是什么意思 ps蒙版是什么意思 ps查看图像尺寸大小快捷键是什么 ps色相饱和度的快捷键是什么 psd是什么格式 新手必看:超实用的PS小技巧介绍 新手必看:PS6滤镜工具怎么安装 新手必看:PS如何绘制虚线框PS中快速绘制虚线框的5种方法介绍 新手教程:教你如何利用PS把臭水沟里的水变清澈透亮 新手必看:PS图片处理小技巧介绍(二) 新手入门必学的Photoshop十条实用技巧及贴士 ps做完的图片怎么保存 ps切片工具怎么保存 新手入门:PS一分钟快速制作电商海报 如何做网站 新手刚开始学习Python时容易出现的错误 新手怎么学ps python是什么意思 新手学python用什么书 python如何做词云 python是一种什么类型的编程语言 北京php工资一般多少 初中学历php好不好学 北京培训php哪家好 oracle认证dba哪里考试 oracle认证考试报名条件 oracle认证哪里考 oracle数据库认证好考吗 oracle认证有中文吗 oracle sql认证方式 oracle认证时间限制 数据库oracle认证有用吗 怎么做香蕉冰棍儿 在家里怎么做香蕉冰棍 小香蕉冰棍儿是怎么做的
新手学习Django的十条注意点
2020-11-27 14:28:41 责编:小采
文档

刚刚开始学习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调试工具
生成模型图表,你可以展示给你的老板
……

下载本文
显示全文
专题苹果笔记本截屏的快捷键是什么苹果笔记本截屏的快捷键是什么专题iphone照片永久删除怎么恢复iphone照片永久删除怎么恢复专题废手机怎样提炼黄金废手机怎样提炼黄金专题手机卡没信号怎么回事手机卡没信号怎么回事专题电脑启动不了反复启动电脑启动不了反复启动专题iphone视频怎么转音频iphone视频怎么转音频专题qq个人文件夹中的文件被占用暂时无法登录qq个人文件夹中的文件被占用暂时无法登录专题word表格每页固定表头word表格每页固定表头专题注册微信怎么跳过辅助注册微信怎么跳过辅助专题微信收藏占用手机存储空间吗微信收藏占用手机存储空间吗专题无手机号怎么注册qq无手机号怎么注册qq专题橡胶刺鼻气味如何去除橡胶刺鼻气味如何去除专题家里的蟑螂是怎么来的家里的蟑螂是怎么来的专题怎么赶走黄鼠狼妙招怎么赶走黄鼠狼妙招专题蟑螂怎么来的蟑螂怎么来的专题相互宝怎么取消相互宝怎么取消专题相互保怎么退出相互保怎么退出专题雪是怎么形成的雪是怎么形成的专题蟑螂是怎么进入家里的蟑螂是怎么进入家里的专题洁厕灵蓝泡泡怎么用洁厕灵蓝泡泡怎么用专题如何判断面粉变质如何判断面粉变质专题房间里有老鼠用什么方法可以解决房间里有老鼠用什么方法可以解决专题家庭野生菌冷冻保存技巧家庭野生菌冷冻保存技巧专题竹荪煮多长时间熟竹荪煮多长时间熟专题老鼠胶怎么洗掉老鼠胶怎么洗掉专题怎么杀蟑螂怎么杀蟑螂专题航班号怎么看航班号怎么看专题花雕酒怎么喝花雕酒怎么喝专题板栗壳怎么好剥板栗壳怎么好剥专题烤红薯没有锡纸怎么办烤红薯没有锡纸怎么办专题django安装步骤专题python课程顺序专题如何安装django专题django如何安装专题django框架使用方法专题python课程框架专题django使用教程专题对python课程的建议专题django安装成功专题python深度学习例子专题python 案例学习专题python 学习案例专题django框架面试题专题django工作流程专题学习python的要求专题python学哪些框架专题django 使用教程专题django 案例专题django中文教程专题学python要学什么框架专题