代码改变世界

django restul webservice返回json数据

2013-09-27 23:14  Lves Li  阅读(1560)  评论(2编辑  收藏  举报

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

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

工程目录:

下面开始:

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

 

  1. '''  
  2. Created on 2013-9-19  
  3.   
  4. @author: lele  
  5. '''  
  6. from django.db import models  
  7.    
  8.   
  9.    
  10. # Create your models here.  
  11. class Student(models.Model):  
  12.       
  13.     id=models.IntegerField(primary_key=True)  
  14.     Pnamemodels.CharField(max_length=500)  
  15.     age=models.IntegerField()  
  16.   
  17.     class Meta:  
  18.         ordering = ('id',)  

 

序列化:

serializers.py

 

  1. # -*- coding: UTF-8 -*-  
  2. '''  
  3. Created on 2013-9-19  
  4.   
  5. @author: lele  
  6. '''  
  7. from django.forms import widgets  
  8. from rest_framework import serializers  
  9. from models import Student,Content  
  10. class StudentSerializer(serializers.ModelSerializer):  
  11.     mystudentsdetail = serializers.HyperlinkedRelatedField(many=Trueview_name='student-detail')  
  12.     class Meta:  
  13.         model = Student  
  14.         fields = ('id', 'Pname','age')  
  15.     id = serializers.IntegerField()  # Note: `Field` is an untyped read-only field.  
  16.     Pnameserializers.CharField(max_length=100)  
  17.     age=serializers.IntegerField()  
  18.           
  19.     def restore_object(self, attrs, instance=None):  
  20.         """  
  21.         Create or update a new snippet instance.  
  22.         """  
  23.         if instance:  
  24.             # Update existing instance  
  25.             instance.Panme = attrs['Pname']  
  26.             instance.id = attrs['id']  
  27.             instance.age = attrs['age']  
  28.               
  29.             return instance  
  30.   
  31.         # Create new instance  
  32.         return Student(**attrs)  
  33.       
  34.       


views.py:

 

 

  1. '''  
  2. Created on 2013-9-19  
  3.   
  4. @author: lele  
  5. '''  
  6.   
  7. from django.http import HttpResponse  
  8. from models import Student,Content  
  9. from serializers import StudentSerializer  
  10. from rest_framework import viewsets  
  11.   
  12.       
  13.       
  14. class StudentViewSet(viewsets.ModelViewSet):  
  15.       
  16.     """  
  17.     This viewset automatically provides `list`, `create`, `retrieve`,  
  18.     `update` and `destroy` actions.  
  19.   
  20.     Additionally we also provide an extra `highlight` action.  
  21.     """  
  22.     queryset = Student.objects.all()  
  23.     serializer_class = StudentSerializer  

修改配置文件:

 

在settings.py中修改databases

 

  1. DATABASES = {  
  2.     'default': {  
  3.         'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.  
  4.         'NAME': 'test',                      # Or path to database file if using sqlite3.  
  5.         # The following settings are not used with sqlite3:  
  6.         'USER': 'root',  
  7.         'PASSWORD': '123456',  
  8.         'HOST': '127.0.0.1',                      # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.  
  9.         'PORT': '3306',                      # Set to empty string for default.  
  10.     }  
  11. }  

 

 

还是在settings.py中添加:

 

  1. REST_FRAMEWORK = {  
  2.     # Use hyperlinked styles by default.  
  3.     # Only used if the `serializer_class` attribute is not set on a view.  
  4.     'DEFAULT_MODEL_SERIALIZER_CLASS':  
  5.         'rest_framework.serializers.HyperlinkedModelSerializer',  
  6.      
  7.     'DEFAULT_PERMISSION_CLASSES': (  
  8.     'rest_framework.permissions.AllowAny',  
  9.     ),  
  10.   
  11.     'PAGINATE_BY': 3,  #every  number in page   
  12.     'PAGINATE_BY_PARAM': 'page_size',  
  13.     'MAX_PAGINATE_BY': 100    
  14. }  


设置访问连接:

 

在urls.py设置

 

  1. from django.conf.urls import patterns, include, url  
  2. from rest_framework import viewsets, routers  
  3. from views import StudentViewSet  
  4.   
  5.   
  6.   
  7. router = routers.DefaultRouter()  
  8. router.register(r'mystudents',StudentViewSet)  
  9.   
  10.   
  11.   
  12. urlpatterns = patterns('',  
  13.     url(r'^', include(router.urls)),  
  14.     url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),  
  15. )  



就剩最后一步了在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