您的位置:首页 > 编程语言 > Go语言

一个Django的小例子(静态路径、url配置、ajax数据传递)

2014-05-10 15:05 295 查看

1、静态路径设置(访问本地的js/css文件)

如果不设置的话,<script src="path">中的path会自动变为url请求,即http://host/path,这样的话本地文件就访问不到了

STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static') ,
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

这样之后在程序中,就可以i这么写了<script src="{{STATIC_URL}}path">

2、url配置

(a)基本结构:

from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
url("匹配url的正则表达式",include("其他包含urlpatterns的py文件")),
..................
)

正则表达式的匹配成功应该分为两种情况,一种是待匹配的字符串是否完全符合某种模式,另一种是待匹配的字符串是否包含符合当前模式的子字符串,比如模式串a.*b,"axxxxxxxxxxb"可以与它完全匹配(第一种情况),当然也包含符合该模式的子串,而"xxaxxxbxxx"就不符合第一种情况了,但在第二情况下也算是匹配成功。此处的url匹配以第二种为标准,假如你写的url的正则表达式是空字符串“”,那么任何发送过来请求的url都会匹配成功,这样就没什么意义了。

为了精确匹配,可以借助符号^,$,如果我们用尾部不是$的模式’^hello/’,那么任何以/hello/开头的URL将会匹配,例如:/hello/foo 和/hello/bar,而不仅仅是/hello/。类似地,如果我们忽略了尖号(^),即’hello/$’,那么任何以hello/结尾的URL将会匹配,例如:/foo/bar/hello/。如果我们简单使用hello/,即没有^开头和$结尾,那么任何包含hello/的URL将会匹配,如:/foo/hello/bar,在含有include的url配置中不要加$。

(b)解析过程:

从第一个斜杠后的第一个字母开始匹配,第一个斜杠在url解析时会被忽略,除此之外的每一个斜杠都会参与解析,包括最后一个,如下例:

urls.py:url(r'^home/',include('MyApp')

从客户端发送过来的url请求,如http://127.0.0.1:8000/home/index,其解析过程为:首先忽略掉http://127.0.0.1:8000/,解析home/index,home/被urls.py截取,剩下的index扔给MyApp下的_ _init_ _.py去解析

3、json数据的传递与解析

(a)解析来自客户端的json

_dict=request.REQUEST
data=json.loads(_dict['key'],'utf-8')
这样能获取的前提是,js中传递过来的json数据经过JSON.stringify的处理

(b)返回本地数据到客户端

rst=json.dumps(ret)
if type(rst) in [types.TupleType,types.ListType]:
content_type,body=rst
return HttpResponse(body,content_type)
return HttpResponse(rst)
注:客户端无须做额外解析,可直接访问,如数组,字典等,都可以直接当作数组、字典看

4、ajax中的url

若不以斜杠开始,URL为将当前路径中最后的斜杠后的内容替换为当前url,若最后斜杠后没有其他内容,则直接连接

若有斜杠,则url为域名+当前url的形式

5、如何通过模板变量访问setting.py中的预定义的变量

如果不想特别指明的话,直接在render_to_response中传递locals即可,否则就认为构造字典进行传递,如要在模板中访问settings.py中的STATIC_URL,代码如下:

from DjangoDemo.settings import STATIC_URL

def index(request):
_dict={}
_dict['STATIC_URL']=STATIC_URL
return render_to_response('index.html',_dict,context_instance=RequestContext(request))


locals是否应该使用呢?请参考:http://stackoverflow.com/questions/1901525/django-template-and-the-locals-trick
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: