您的位置:首页 > Web前端 > JavaScript

django restul webservice返回json数据

2013-09-27 23:14 465 查看
做这个demo的前提是你已经配好了python ,django ,djangorestframwork(在我的上一篇博客中有介绍,大家也可以google),mysql-python等。

djangorestframwork的官网点击打开链接http://django-rest-framework.org/

工程目录:



下面开始:

models.py 主要负责数据库对象的映射

[html] view plaincopyprint?

'''

Created on 2013-9-19

@author: lele

'''

from django.db import models

# Create your models here.

class Student(models.Model):

id=models.IntegerField(primary_key=True)

Pname= models.CharField(max_length=500)

age=models.IntegerField()

class Meta:

ordering = ('id',)

序列化:

serializers.py

[html] view plaincopyprint?

# -*- coding: UTF-8 -*-

'''

Created on 2013-9-19

@author: lele

'''

from django.forms import widgets

from rest_framework import serializers

from models import Student,Content

class StudentSerializer(serializers.ModelSerializer):

mystudentsdetail = serializers.HyperlinkedRelatedField(many=True, view_name='student-detail')

class Meta:

model = Student

fields = ('id', 'Pname','age')

id = serializers.IntegerField() # Note: `Field` is an untyped read-only field.

Pname= serializers.CharField(max_length=100)

age=serializers.IntegerField()

def restore_object(self, attrs, instance=None):

"""

Create or update a new snippet instance.

"""

if instance:

# Update existing instance

instance.Panme = attrs['Pname']

instance.id = attrs['id']

instance.age = attrs['age']

return instance

# Create new instance

return Student(**attrs)

views.py:

[html] view plaincopyprint?

'''

Created on 2013-9-19

@author: lele

'''

from django.http import HttpResponse

from models import Student,Content

from serializers import StudentSerializer

from rest_framework import viewsets

class StudentViewSet(viewsets.ModelViewSet):

"""

This viewset automatically provides `list`, `create`, `retrieve`,

`update` and `destroy` actions.

Additionally we also provide an extra `highlight` action.

"""

queryset = Student.objects.all()

serializer_class = StudentSerializer

修改配置文件:

在settings.py中修改databases

[html] view plaincopyprint?

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.

'NAME': 'test', # Or path to database file if using sqlite3.

# The following settings are not used with sqlite3:

'USER': 'root',

'PASSWORD': '123456',

'HOST': '127.0.0.1', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.

'PORT': '3306', # Set to empty string for default.

}

}

还是在settings.py中添加:

[html] view plaincopyprint?

REST_FRAMEWORK = {

# Use hyperlinked styles by default.

# Only used if the `serializer_class` attribute is not set on a view.

'DEFAULT_MODEL_SERIALIZER_CLASS':

'rest_framework.serializers.HyperlinkedModelSerializer',

'DEFAULT_PERMISSION_CLASSES': (

'rest_framework.permissions.AllowAny',

),

'PAGINATE_BY': 3, #every number in page

'PAGINATE_BY_PARAM': 'page_size',

'MAX_PAGINATE_BY': 100

}

设置访问连接:

在urls.py设置

[html] view plaincopyprint?

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

from rest_framework import viewsets, routers

from views import StudentViewSet

router = routers.DefaultRouter()

router.register(r'mystudents',StudentViewSet)

urlpatterns = patterns('',

url(r'^', include(router.urls)),

url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),

)

就剩最后一步了在mysql数据库中添加 数据

注意:数据库的名字与setting.py中的一致,table的名字格式是:项目名_对象名

例如我的项目名为:djangodemo2 models.py中的model对象名为student ,所以我的表名为:djangodemo2_student

有三个字段 id,Pname ,age 要与serializers.py中的fields字段相同

本例中的字段如下:



运行测试:

在浏览器中输入:http://localhost:8000 即可看到如下页面:



点击链接进入具体信息页面:



转载请注明:

新浪微博:http://weibo.com/u/3202802157

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: