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 即可看到如下页面:
点击链接进入具体信息页面:
转载请注明:
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
相关文章推荐
- ext异步请求一个aspx/ashx/web service取得数据,服务端返回一个json.然后客户端接收并显示.
- cxf web service 解决返回的json格式数据乱码问题
- WCF服务返回JSON格式数据、配置web调用地址
- webservice+Jquery返回Json格式
- django 使用HttpResponse返回json数据为中文
- Ext JS GridPanel + WebService + 返回xml数据 + 批量删除
- C#.NET WebApi返回各种类型(图片/json数据/字符串),.net图片转二进制流或byte
- 玩转Web之Json(三)-----easy ui怎么把前台显示的dataGird中的所有数据序列化为json,返回到后台并解析
- 用Clojure编写REST service 三 返回JSON
- Delphi调用 .net webService 返回数据;
- webservice+Jquery返回Json格式
- JavaWeb框架-SpringMVC-4-文件上传与返回JSON数据
- 玩转Web之Json(三)-----easy ui怎么把前台显示的dataGird中的所有数据序列化为json,返回到后台并解析
- JMeter 格式化输出rest服务返回json数据
- 玩转Web之Json(三)-----easy ui怎么把前台显示的dataGird中的所有数据序列化为json,返回到后台并解析
- WCF+REST 返回Json数据有双引号怎么去掉
- 【原创】 ASP.NET + C# + WEBSERVICE 返回表数据和记录数据
- ssh/ssm使用CXF实现基于Rest方式的WebService并返回json数据
- django 返回json数据,jquery获取并且打印出来
- django 访问数据库返回 JSON数据格式