django-dajaxice的安装配置.
在使用django1.6做项目时,用到了界面上的ajax请求, 由于django的csrf的原因 使用传统的jquery的ajax ,非常不方便,
强大的django,怎么能没有解决方法,这里提供一个比较好的插件, django-dajaxice
下面讲述下关于这个插件的安装配置:
1,安装:
使用pip安装:
sudo pip install django_dajaxice
2.配置settings.py:
2.1,在你的project中的settings.py 中的INSTALLED_APPS中加入dajaxice
INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'dajaxice', ... )
2.2,在TEMPLATE_LOADERS中增加'django.template.loaders.eggs.Loader',
TEMPLATE_LOADERS = ( 'django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader', 'django.template.loaders.eggs.Loader', )
2.3, 在TEMPLATE_CONTEXT_PROCESSORS 中确认有 django.core.context_processors.request
TEMPLATE_CONTEXT_PROCESSORS = ( 'django.contrib.auth.context_processors.auth', 'django.core.context_processors.debug', 'django.core.context_processors.i18n', 'django.core.context_processors.media', 'django.core.context_processors.static', 'django.core.context_processors.request', 'django.contrib.messages.context_processors.messages' )
2.4,增加 dajaxice.finders.DajaxiceFinder 在 STATICFILES_FINDERS:
STATICFILES_FINDERS = ( 'django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'dajaxice.finders.DajaxiceFinder', )
ps:TEMPLATE_LOADERS和TEMPLATE_CONTEXT_PROCESSORS 在默认的settings.py配置里没有,这里直接粘贴复制就行
3.配置URLS
3.1 导入一下models
from dajaxice.core import dajaxice_autodiscover, dajaxice_config dajaxice_autodiscover()
3.2 增加url
urlpatterns = patterns('', ... url(dajaxice_config.dajaxice_url, include('dajaxice.urls')), ... )
ps:
If you aren’t using django.contrib.staticfiles, you should also enable it importing:
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
and adding this line to the bottom of your urls.py:
urlpatterns += staticfiles_urlpatterns()
4.配置模版
{% load dajaxice_templatetags %} <html> <head> <title>My base template</title> ... {% dajaxice_js_import %} </head> ... </html>
5,测试
在项目下建立一个ajax.py,
import json def sayhello(request): return json.dumps({'message':'Hello World'})
然后在模版html中:
<script> function my_callback(data){ alert(data.message); } </script> <input type="button" onclick="Dajaxice.oak.sayhello(my_callback)" value="Get message from server!">
在这个过程中出现的问题以及解决方法:
1.web界面报错:ImportError:No module named defaults
Exception Value: |
No module named defaults |
---|---|
Exception Location: | /usr/local/lib/python2.7/dist-packages/dajaxice/urls.py in <module>, line 1 |
这是因为在dajaxice的源代码中导入有误,这个问题我在github上issue 看到解决方法:
将dajaxice源代码中/usr/local/lib/python2.7/dist-packages/dajaxice/urls.py文件中的
from django.conf.urls.defaults import *
改为:
from django.conf.urls import *
可解决问题.
2.onclick="Dajaxice.oak.sayhello(my_callback)" 这个oak哪里的
看我下面的项目部分结构图:
oakcloud/
├── db.sqlite3
├── manage.py
├── oak
│ ├── account.py
│ ├── account.pyc
│ ├── admin.py
│ ├── admin.pyc
│ ├── ajax.py
│ ├── ajax.pyc
│ ├── classes.py
│ ├── classes.pyc
│ ├── forms.py
│ ├── forms.pyc
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── models.py
│ ├── models.pyc
│ ├── network.py
│ ├── network.pyc
│ ├── plugins
│ │ ├── __init__.py
│ │ ├── __init__.pyc
│ │ └── network
│ │ ├── __init__.py
│ │ ├── __init__.pyc
│ │ ├── methods.py
│ │ ├── methods.pyc
│ │ ├── models.py
│ │ └── models.pyc
│ ├── tests.py
│ ├── urls.py
│ ├── urls.pyc
│ ├── utils.py
│ ├── utils.pyc
│ ├── views.py
│ └── views.pyc
├── oakcloud
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── settings.py
│ ├── settings.pyc
│ ├── urls.py
│ ├── urls.pyc
│ ├── wsgi.py
│ └── wsgi.pyc
├── static
至此,对django-dajaxice的配置就完成了,能够正常使用了,如果大家想了解更多有关django-dajaxice的功能,可以访问它的官方网站获取更多内容.附:http://www.dajaxproject.com/#dajaxice