标签:style 情况 ext cte star next 图像 框架 start.s
创建一个名为Django的新项目tutorial
,然后启动一个新的应用程序quickstart
。
# Create the project directory
mkdir tutorial
cd tutorial
# Create a virtualenv to isolate our package dependencies locally
virtualenv env
source env/bin/activate# On Windows use `env\Scripts\activate`
# Install Django and Django REST framework into the virtualenv pip install django pip install djangorestframework # Set up a new project with a single application
django-admin.py startproject tutorial .# Note the trailing ‘.‘ character 同级目录下
cd tutorial
django-admin.py startapp quickstart
cd .. #下级目录
现在第一次同步您的数据库:
python manage.py migrate
我们还将创建一个以admin
密码命名的初始用户password123
。我们稍后将在该示例中验证该用户。
python manage.py createsuperuser
一旦你设置了一个数据库,并且初始用户创建并准备好了,打开应用程序的目录,我们将得到编码...
首先我们要定义一些序列化程序。我们创建一个名为tutorial/quickstart/serializers.py
我们将用于我们的数据表示的新模块。
from django.contrib.auth.models import User, Group
from rest_framework import serializers
class UserSerializer(serializers.HyperlinkedModelsSerializer):
class Meta:
model = User
fields = (‘url‘,‘username‘,‘email‘,‘groups‘)
class GroupSerializers(serializers.HyperlinkedModelsSerializer):
class Meta:
model = Group
fields = (‘url‘,‘name‘)请注意,在这种情况下,我们正在使用超链接关系
HyperlinkedModelSerializer
。您还可以使用主键和各种其他关系,但超链接是好的RESTful设计。
对,我们最好再写一些看法。打开tutorial/quickstart/views.py
并打字。
from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from tutorial.quickstart.serializers import UserSerializer, GroupSerializers
class UserViewSet(viewset.ModelViewSet):
queryset = User.object.all().order_by(‘-date_joined‘)
serializers_class = UserSerializer
class GroupViewSet(viewset.ModelsViewSet):
queryset = Group.object.all()
serializer_class = GroupSerializer
而不是写多个视图,我们将所有常见行为分组到被调用的类中ViewSets
。
如果我们需要,我们可以轻松地将这些细节分解为个人观点,但是使用视图可以使视图的逻辑很好地组织起来,并且非常简洁。
好的,现在我们来连接API的URL。到tutorial/urls.py
...
from django.conf.urls import url, include
from rest_framework import routers
from tutrial.quickstart import views
router = routers.DefalutRouter()
router.register(r‘user‘, views.UserViewSet)
router.register(r‘group‘,views.GroupViewSet)
urlpatterns = [
url(r‘^‘, include(router.urls)),
url(r‘^api-auth/‘,include(‘rest_framework.urls‘, namespace=‘rest_framework‘))
]
因为我们使用的是视图而不是视图,所以我们可以通过简单地使用路由器类注册该视图来自动生成API的URL conf。
再次,如果我们需要对API URL的更多控制,我们可以简单地将其下拉到使用常规的基于类的视图,并明确地编写URL conf。
最后,我们将包括默认登录和注销视图,以便与可浏览的API一起使用。这是可选的,但如果您的API需要身份验证,并且您想要使用可浏览的API,那么这是非常有用的。
我们也想设置一些全局设置。我们想打开分页,我们希望我们的API只能由管理员使用。设置模块将在tutorial/settings.py
INSTALLED_APPS = (
‘rest_framework‘,
)
REST_FRAMEWORK = {
‘DEFAULT_PERMISSION_CLASSES‘: [
‘rest_framework.permissions.IsAdminUser‘,
],
‘PAGE_SIZE‘: 10
}
好的,我们完成了
我们现在准备测试我们构建的API。我们从命令行启动服务器。
python manage.py runserver
我们现在可以从命令行访问我们的API,使用像curl
...
bash: curl -H ‘Accept: application/json; indent=4‘ -u admin:password123 http://127.0.0.1:8000/users/
{
"count": 2,
"next": null,
"previous": null,
"results": [
{
"email": "admin@example.com",
"groups": [],
"url": "http://127.0.0.1:8000/users/1/",
"username": "admin"
},
{
"email": "tom@example.com",
"groups": [ ],
"url": "http://127.0.0.1:8000/users/2/",
"username": "tom"
}
]
}
或使用httpie,命令行工具...
bash: http -a admin:password123 http://127.0.0.1:8000/users/
HTTP/1.1 200 OK
...
{
"count": 2,
"next": null,
"previous": null,
"results": [
{
"email": "admin@example.com",
"groups": [],
"url": "http://localhost:8000/users/1/",
"username": "paul"
},
{
"email": "tom@example.com",
"groups": [ ],
"url": "http://127.0.0.1:8000/users/2/",
"username": "tom"
}
]
}
或直接通过浏览器,转到URL http://127.0.0.1:8000/users/
...
如果您正在使用浏览器,请确保使用右上角的控件进行登录。
标签:style 情况 ext cte star next 图像 框架 start.s
原文地址:http://www.cnblogs.com/chenyang13677/p/7554411.html