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

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django 中使用 Ajax 进行前后端数据传递需要以下几个步骤: 1. 在前端编写 Ajax 请求,使用 jQuery 等前端库可以方便地实现。 2. 在 Django 后端编写视图函数来处理 Ajax 请求。这个视图函数需要返回数据给前端。 3. 在前端接收后端返回的数据,并进行相应的处理。 下面是一个简单的示例: 在前端 HTML 文件中添加一个按钮,点击该按钮触发 Ajax 请求: ```html <button id="myButton">点击我</button> <script> $(document).ready(function() { $('#myButton').click(function() { $.ajax({ url: '/my-ajax-url/', type: 'POST', data: { 'myData': 'Hello World!' }, success: function(data) { console.log(data); } }); }); }); </script> ``` 在 Django 后端编写视图函数,处理该 Ajax 请求: ```python from django.http import JsonResponse def my_ajax_view(request): if request.method == 'POST' and request.is_ajax(): my_data = request.POST.get('myData') # 处理数据 ... response_data = {'result': 'success'} return JsonResponse(response_data) else: return HttpResponseBadRequest() ``` 在前端接收后端返回的数据,并进行相应的处理: ```javascript success: function(data) { console.log(data.result); } ``` 以上示例中,前端发送了一个 POST 请求到 `/my-ajax-url/`,并携带了一个名为 `myData` 的数据。后端视图函数 `my_ajax_view` 接收到请求后,从 POST 数据中获取了 `myData` 数据,并进行处理,最后返回了一个 JSON 格式的数据。前端接收到后端返回的数据后,从其中取出 `result` 数据并进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值