使用Django时需要注意的八个要点

1.settings.py中使用os. path.dirname()

常用代码如下:

1 # settings.py
2 import os
3 PROJECT_DIR = os.path.dirname(__file__)
4 STATIC_ROOT = os.path.join(PROJECT_DIR, "static")
5 ...
6 TEMPLATE_DIRS = (
7     os.path.join(PROJECT_DIR, "templates"),
8 )

__file__变量表示当前文件,PROJECT_DIR则取得了当前文件的绝对路径,这样做的好处是避免在settings.py中硬编码文件路径.

 

2.使用locals()为模板传递参数

Python 内建函数 locals() ,返回对所有局部变量的名称与值进行映射的字典.

在实际开发中,不需要为模板写出每一个变量,比如:

return render_to_response(‘template.html‘, {"var1": var1, "var2":var2}, context_instance=RequestContext(request))

优化后代码为:

return render_to_response(‘template.html‘, locals(), context_instance=RequestContext(request))

由此延伸:

render_dict = locals()
render_dict[‘also_needs‘] = "this value"
return render_to_response(‘template.html‘, render_dict, context_instance=RequestContext(request))

 

3.部署时将DEBUG设置成False

自动处理的执行代码:

import socket
if socket.gethostname() == ‘XXX-MOBL‘:
    DEBUG = False
else:
    DEBUG = True

 

4.使用exists()函数判断是否取得数据

减少性能的代码:

books = Books.objects.filter(author__last_name=‘Brown‘)
if books:
    # Do something

或者

books = Books.objects.filter(author__last_name=‘Brown‘)
if len(books):
    # Do something

执行books = Books.Object…语句时并没有连接数据库,进行下一步判断才会实际对数据库进行操作.

exists()函数会判断只要存在数据,就会返回1,不会load模型属性或者在DB和APP之间传递大型数据.

所以,使用exists函数能提高性能,如下:

books = Books.objects.filter(author__last_name=‘Brown‘)
if books.exists():
    # Do something 

 

5.合理配置使用URLs

不要将所有url配置在 (mysite/urls.py)一个文件内,可以根据不同Apps,分别配置在自己的urls.py文件中,这样做的好处之一是简洁明了,并可以容易重复使用App到不同的项目中,示例代码如下:

urlpatterns = patterns(‘‘,
    url(r‘^polls/‘, include(‘polls.urls‘, namespace="polls")),
    url(r‘^admin/‘, include(admin.site.urls)),
)

在polls的urls.py文件中存在如下代码:

from polls import views
urlpatterns = patterns(‘‘,
    url(r‘^$‘, views.index, name=‘index‘),
    url(r‘^(?P<poll_id>\d+)/$‘, views.detail, name=‘detail‘),
    url(r‘^(?P<poll_id>\d+)/results/$‘, views.results, name=‘results‘),
)

比如想实现如下功能,其中硬编码了/polls/,以后有相应变动,会很麻烦.

<li><a href="/polls/{{ poll.id }}/">{{ poll.question }}</a></li>

优化后的代码如下:

<li><a href="{% url ‘polls.detail‘ poll.id %}">{{ poll.question }}</a></li>

{% url %}标签会根据”polls.detail”在mysite/urls.py文件中寻找namespage=”polls”的相应URL,假如poll.id变量为5,演化后的实际代码想象中就是:

<li><a href="项目根目录/polls/5/">{{ poll.question }}</a></li>

这样做另外的好处是,避免了在template中硬编码URL,这也是django编程中要注意的要点(不要在模板中硬编码URL

 

6.不要在模板中硬编码静态文件路径

不好的代码示范:

<img src="/static/images/test.png">{{ poll.question }}</img>

Django.contrib. staticfiles是静态资源管理的一个App, 相关的设置settings.py主要有三个:

STATIC_ROOT:  项目部署时,需要将所有用到的静态文件(包括INSTALLED_APPS下各个App的static文件夹下文件和STATICFILES_DIRS设置目录下文件)收集到一个目录,交给服务器进行处理(在项目实际部署时,要配置服务器来服务这个目录),STATIC_ROOT就是那个目录,只有在运行collectstatic命令时才会用到.

STATIC_URL:  静态文件的起始目录,浏览器访问时的地址前缀,如果STATIC_URL = /test/,runserver后,任意静态文件的路径都将以/test/开始,即”/test/”代表了STATIC_ROOT.(可以随意修改STATIC_URL值,但是必须以斜线开始,否者找不到静态文件地址).

STATICFILES_DIRS:  除了各个app的static目录以外,其他还需要管理的静态文件设置.

优化后的代码:

<img src="{{ STATIC_URL }}/images/test.png">{{ poll.question }}</img>

或者

{% load staticfiles %}
<img src="{% static "my_app/myexample.jpg" %}" alt="My image"/>

PS{% static %}{{ STATIC_URL}}的使用不同之处,待解决

 

7.只加载一次自定义的模板标签

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

{% load cms_tags %} 

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

为了DRY, 优化后的解决办法是:将以下代码加到项目启动时能加载的文件中(setting.py、urls.py文件 etc.)

from django import template
template.add_to_builtins(‘cms.templatetags.cms_tags‘)

 

8. 了解一些第三方应用

a. 数据迁移 —— South

常用命令:

python manage.py schemamigration youappname –initial
python manage.py schemamigration youappname --auto #检测对models的更改
python manage.py migrate youappnam
python manage.py syncdb

b. Django Debug ——Django-debug-toolbar (使用ing…)

时间: 2024-11-09 00:57:47

使用Django时需要注意的八个要点的相关文章

玩django时运行python manage.py runserver时遇到问题

解决办法: yum install sqlite-dev cd python2   #python重新编译 python setup.py make python setup.py make install #然后进入python import sqlite3

中山企业网站建设的八个要点

想要建大楼就需要打好基层,想要建大网站就需要把细节做好.这两点讲的是同一个道理--组成部分很重要.这里小编主要想介绍的就是企业网站建设中网页建设如何实施.??一,选择专业的网站建设公司? ? ? ??由于传统企业自身不具备互联网知识,如果要自己制作一个网站自然也是不现实的,因此最好的办法便是找一个专业的网站建设公司来执行.在这里需要企业注意的是,每个网站建设公司的水平和技术都不尽相同.? ? ? ??所以企业选择不同的网站建设公司,所制作出的网站质量也会不同.而为了保证企业的网站制作出来具有更好

django面试八

1. 对Django的认识? #1.Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构.以及全功能的管理后台. #2.Django内置的ORM跟框架内的其他模块耦合程度高. #应用程序必须使用Django内置的ORM,否则就不能享受到框架内提供的种种基于其ORM的便利: #理论上可以切换掉其ORM模块,但这就相当于要把装修完毕的房子拆除重新装修,倒不如一开始就去毛胚房做全新的装修. #3.Django的卖点是超高的开发效

Django部署时为什么要用 uWSGI与 Nginx? 以及 WSGI,uwsgi等协议

Django框架的服务器架构一般是 Nginx + uWSGI + Django 1 WSGI协议,uwsgi协议 WSGI协议(通讯协议):Python用于Web开发的协议(用于处理Web服务器和应用程序(APP)的交互信息) (把http通讯的过程抽象出来(请求数据,响应数据的封装),开发者只负责处理中途的数据) uwsgi协议(传输协议,速度很快):uWSGI程序实现的一个自有的协议(采用二进制来存储数据,之前的协议都是使用字符串,所以在存储空间和解析速度上,都更快) 注意: WSGI是一

django常见问题

1 列举Http请求中常见的请求方式 HTTP请求的方法: HTTP/1.1协议中共定义了八种方法(有时也叫“动作”),来表明Request-URL指定的资源不同的操作方式 注意: 1)方法名称是区分大小写的,当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Mothod Not Allowed):当服务器不认识或者不支持对应的请求方法时,应返回状态码501(Not Implemented). 2)HTTP服务器至少应该实现GET和HEAD/POST方法,其他方法都是

django 配置 Django

Django项目的设置文件位于项目同名目录下,名叫settings.py.这个模块,集合了整个项目方方面面的设置属性,是项目启动和提供服务的根本保证. 一.简述 settings.py文件本质上是一个Python模块,带有模块级别的变量. 下面是一些示例设置: ALLOWED_HOSTS = ['www.example.com'] DEBUG = False DEFAULT_FROM_EMAIL = '[email protected]' 注:当DEBUG为False时,必须设置ALLOWED_

配置 Django

Django项目的设置文件位于项目同名目录下,名叫settings.py.这个模块,集合了整个项目方方面面的设置属性,是项目启动和提供服务的根本保证. 一.简述 settings.py文件本质上是一个Python模块,带有模块级别的变量. 下面是一些示例设置: ALLOWED_HOSTS = ['www.example.com'] DEBUG = False DEFAULT_FROM_EMAIL = '[email protected]' 注:当DEBUG为False时,必须设置ALLOWED_

django考点答案

1 列举Http请求中常见的请求方式 2 谈谈你对HTTP协议的认识.1.1 长连接3 简述MVC模式和MVT模式4 简述Django请求生命周期5 简述什么是FBV和CBV6 谈一谈你对ORM的理解7 rest_framework 认证组件的流程8 什么是中间件并简述其作用9 django 中间件生命周期 10 django中怎么写原生SQL11 如何使用django orm批量创建数据12 命令migrate 和makemigrations的差别14 常用视图响应的方式是什么?15 HTTP

Django基础五之django模型层(二)多表操作

目录 一 创建模型 关于db_column和verbose_name 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询(基于join实现的) 进阶练习(连续跨表) 五 聚合查询.分组查询.F查询和Q查询 查询练习 F查询与Q查询 F查询 Q查询 六 ORM执行原生sql语句(了解) 执行原生查询 直接执行自定义SQL 七 Python脚本中调用Django环境(django外部脚本使用models) 八 补充多个app配置models 本节目录 一 创建模型 表和表之间的关系