django中url,静态文件,POST请求的配置
2015-06-01 17:00
561 查看
平时使用的是pycharm,所以这篇文章主要也是使用pycharm默认创建的django项目为基础进行讲解。项目目录如下图:
因为django是类MVC的开发模式。这里面就涉及到配置URL的问题。创建一个自己的
然后需要在
新创建项目的默认url配置如下:
那么怎么把新创建的
新创建APP中的
那么访问的url是:
http://127.0.0.1:8000/load/load_index/
上面两个配置文件的意义是:
当django接收到请求的时候,会按照url中的层级中第一层(例子中的时
如果能够扫瞄到就接着按照第二层
首先看django的官方文档(我使用的版本是django1.6版本):
https://docs.djangoproject.com/en/1.6/howto/static-files/
当创建一个django的项目的时候在项目的根目录都会生成一个默认的配置文件
关于静态文件的默认配置如下代码:
阅读过官方文档以后(强烈建议),我们只需要在
当我浏览网页的时候,可以发现能够正确的找到静态文件。如下图:
后端python处理的方式:
能够正常接收到
看下结果,如下图:
那么使用
只需要修改jQuery代码中的参数即可,先修改url为:
然后修改:
当再次尝试往后端传递参数的时候,结果如下图:
发生了
对
第一种解决办法:
我们首先尝试注释掉这一行,验证是否能够正常的发送
可以看到结果是
第二种解决办法:
导入
模块,并且在接受
经过验证,可以正常的接受
CSRF推荐阅读:
http://www.cnblogs.com/lins05/archive/2012/12/02/2797996.html
1.URL的配置
当创建好项目后,运行项目就可以看到django默认的页面。那么怎么访问自己创建的页面呢?因为django是类MVC的开发模式。这里面就涉及到配置URL的问题。创建一个自己的
APP(也可以称为一个模块),包含的文件内容如下图:
然后需要在
setting.py的文件
INSTALLED_APPS中注册新创建的
App:
新创建项目的默认url配置如下:
from django.conf.urls import patterns, include, url from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', # Examples: # url(r'^$', 'django_static_file_config.views.home', name='home'), # url(r'^blog/', include('blog.urls')), url(r'^admin/$', include(admin.site.urls)), )
那么怎么把新创建的
App的
urls.py和项目默认的
urls.py关联起来呢?需要做如下的配置:
from django.conf.urls import patterns, include, url from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', # Examples: # url(r'^$', 'django_static_file_config.views.home', name='home'), # url(r'^blog/', include('blog.urls')), url(r'^admin/$', include(admin.site.urls)), #通过include()函数包含新APP种的url url(r'^load/', include('index.urls')), )
新创建APP中的
urls.py的配置如下:
#!usr/bin/env python # coding: utf-8 from django.conf.urls import patterns from django.conf.urls import url urlpatterns = patterns('', url(r'^load_index/$', 'index.view.load_index', name='load_index'), )
那么访问的url是:
http://127.0.0.1:8000/load/load_index/
上面两个配置文件的意义是:
当django接收到请求的时候,会按照url中的层级中第一层(例子中的时
/load/)去扫描默认的配置文件,即下面的这条语句:
url(r'^load/', include('index.urls')),
如果能够扫瞄到就接着按照第二层
load_index去扫描include导入的url,也就是项目中新创建APP的
urls.py中url是否有匹配项。
2.静态文件的配置
之前在学习django的时候,在静态文件的配置上花费了很多时间,而且没有解决问题,网上也是一搜一大堆的各种解决办法,但是仍然不适用自己的项目。因为不同版本的django都会有些变化,所以强烈建议根据自己的当前版本,选择阅读官方文档:首先看django的官方文档(我使用的版本是django1.6版本):
https://docs.djangoproject.com/en/1.6/howto/static-files/
当创建一个django的项目的时候在项目的根目录都会生成一个默认的配置文件
setting.py:
关于静态文件的默认配置如下代码:
# Static files (CSS, JavaScript, Images) # 这里已经为我们生成了官方文档的地址 # https://docs.djangoproject.com/en/1.6/howto/static-files/ STATIC_URL = '/static/' TEMPLATE_DIRS = ( os.path.join(BASE_DIR, 'templates'), )
阅读过官方文档以后(强烈建议),我们只需要在
setting.py中添加如下的代码指定静态文件的目录即可:
# -----config static file STATICFILES_DIRS = ( os.path.join(BASE_DIR, "static"), )
当我浏览网页的时候,可以发现能够正确的找到静态文件。如下图:
3.POST请求的配置
在看post请求之前,先看一下
get请求的方式,前端jQuery的代码如下:
$(function () { $('.test-post').on('click', function () { var url = '/load/getmethod/' $.ajax({ type: 'GET', data:{ test:'test' }, url: url, success: testSuccess, dataType: 'html', async: false }); }); }) var testSuccess =function (){ };
后端python处理的方式:
def getmethod(request): test = request.GET.get('test','') return HttpResponse(test)
能够正常接收到
get方式传递的参数:
看下结果,如下图:
那么使用
POST的方式会怎么样呢?
只需要修改jQuery代码中的参数即可,先修改url为:
var url = '/load/postmethod/'
然后修改:
type: 'POST',
当再次尝试往后端传递参数的时候,结果如下图:
发生了
403的错误,请求被拒绝了。这是因为django默认的配置
MIDDLEWARE_CLASSES中一个中间件
CSRF(跨站请求伪造),维基百科地址(点击这里):
'django.middleware.csrf.CsrfViewMiddleware',
对
post请求做了验证。
第一种解决办法:
我们首先尝试注释掉这一行,验证是否能够正常的发送
POST请求。
可以看到结果是
OK的,如下图:
第二种解决办法:
导入
from django.views.decorators.csrf import csrf_exempt
模块,并且在接受
post的参数的函数前面添加如下的前缀,
@csrf_exempt def postmethod(request): test = request.POST.get('test','') return HttpResponse(test)
经过验证,可以正常的接受
post请求(有一个缺点就是,在项目的所有的
POST请求的处理函数前面都得加这样的标记):
CSRF推荐阅读:
http://www.cnblogs.com/lins05/archive/2012/12/02/2797996.html
相关文章推荐
- Go语言学习笔记(一) : 搭建Windows下的Go开发环境
- mode_t 内核文件权限值 S_IRUGO=S_IRUSR | S_IRGRP | S_IROTH
- WordPress-当文章属于两个或多个分类时,使其在不同的分类使用不同文章模板的方法
- 探寻Google Photos无限免费的“真相”
- AMD Launches The A10-7870K "Godavari" APU
- 10618 - Tango Tango Insurrection
- HackerRank - "Algorithmic Crush"
- POJ2262 Goldbach's Conjecture(素数问题)
- hdu1847 Good Luck in CET-4 Everybody!(博弈论)
- mongod
- [20150531] Hello June . Wish I good luck in my month .
- [算法]A General Polygon Clipping Library
- HDU 3966 Aragorn's Story
- Lloyd's algorithm and Vorlonoi Diagram
- golang 高效低精度定时器实现
- OC Category(类别)
- Django model
- SGU120 Archipelago
- INSERTION-SORT: INTRODUCTION TO ALGORITHMS