Django 3 分分钟搭建一个RESTful API
Django restframework 简介
时间过得好快,不知不觉这就是Django系列教程的第三部分了,这部分我们将在一分钟之内用django的一个第三方框架-Django restframework搭建我们的第一个api。首先闲话不多说让我们先安装一下这个框架:
sudo pip3 install django-restframework
ok,安装完之后能让我们新建一个project吧
django-admin startproject ara
接着新建一个app:
python3 manage.py startapp users
ok这时候我们的项目结构应该是这样的:
.
├── ara
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── users
├── __init__.py
├── admin.py
├── apps.py
├── models.py
├── tests.py
└── views.py
ok,简单易懂,接着还是我们配置一下restframework吧
Restframework配置
配置这个框架请依照这个步骤来,缺一不可: - 在settings.py中我们install一下
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'users',
'rest_framework'
]
在settings.py中添加这个
# using rest_framework setting this line REST_FRAMEWORK = { # Use Django's standard `django.contrib.auth` permissions, # or allow read-only access for unauthenticated users. 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly' ] }
ok,经过这个配置之后,我们就可以在项目中import restframework了。接下来我要向同志们展示一下这个东西到底有多么吊炸天!
三步搞定一套API,增删改查!
我说过只用三步,那我们就分三步来。 - 第1步: 当然是新建一个models
二话不多说直接复制粘贴代码:
# -*- coding: utf-8 -*-
from django.db import models
# Create your models here.
class User(models.Model):
"""
name: name of user,
gender: user's gender
wechat: user's wechat
"""
name = models.CharField(max_length=100, blank=False)
gender = models.CharField(max_length=4, blank=True)
birthday = models.DateField(blank=True)
portrait_url = models.CharField(max_length=100, blank=True)
home = models.CharField(max_length=20, blank=True)
phone = models.CharField(max_length=17, blank=True)
email = models.CharField(max_length=20, blank=True)
wechat = models.CharField(max_length=20, blank=True)
company = models.CharField(max_length=20, blank=True)
occupation = models.CharField(max_length=20, blank=True)
living_city = models.CharField(max_length=20, blank=True)
def __str__(self):
return self.name
- 第2步: 在app下新建serializers.py,写入这些代码
二话不多说直接复制粘贴代码:
from rest_framework import serializers, viewsets
from users.models import User
class UsersSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = '__all__'
# ViewSets define the view behavior.
class UsersViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UsersSerializer
在这里我们实现一个UsersSerializers以及一个UsersViewSet这两个类,这个序列化函数暂且不知道是干毛的,但是很显然这个函数的作用是把从数据库中查询的结果序列化为字符串。不过重点是这个ViewSet,这个东西就这么几行代码它就帮你实现好了增、删、改、查的所有功能。不是吹牛逼等一下我们来验证看看是不是。 你会惊奇的发现,有了这个ViewSet之后我们都不用写view.py了!!!!!
- 第3步: 配置urls 二话不多说直接复制粘贴代码: ``` from django.conf.urls import url, include from django.contrib import admin from users.serializers import UsersViewSet from rest_framework import routers
router = routers.DefaultRouter() router.register(r’api/v1/users’, UsersViewSet)
urlpatterns = [ url(r’^admin/‘, admin.site.urls), url(r’^api-auth/‘, include(‘rest_framework.urls’, namespace=‘rest_framework’)), url(r’^‘, include(router.urls)) ]
配置urls要用到restframework中的router这个类,这个是一个路由器,或者说是分发器,request的网址分发过来我发给哪个view处理就有他来决定,但是很显然这里并没有发给任何一个view,而是直接发给了一个ViewSet,这个ViewSet结合我们的serializer就可以实现我们的返回json或者接受json的全套功能!就是这么的屌!屌的爆炸!!
好吧,最后说一下urlpatterns里面的几个pattern,第一个是admin不需要多说,重点是最后一个我们include了router的urls,所以说你只需要按照router的网址来写即可,不过重点是router还实现了一个隐士查询也就是你可以加具体数字查询具体的detail。
### Django restframework测试!
说了这么多来测试一下呗!!我们输入:
http://127.0.0.1:8000/api/v1/users
看看返回的结果:
HTTP 200 OK Allow: GET, POST, OPTIONS Content-Type: application/json Vary: Accept
[ { “id”: 1, “name”: “金天”, “gender”: “男”, “birthday”: “1993-12-11”, “portrait_url”: “https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=1593523098,2479335990&fm=116&gp=0.jpg", “home”: “江西南昌”, “phone”: “15116123160”, “email”: “1195889656@qq.com”, “wechat”: “jintianilveu”, “company”: “”, “occupation”: “”, “living_city”: “” }, { “id”: 2, “name”: “Elgins”, “gender”: “男”, “birthday”: “1994-11-02”, “portrait_url”: “”, “home”: “”, “phone”: “”, “email”: “”, “wechat”: “”, “company”: “”, “occupation”: “”, “living_city”: “” } ] ``` 在网页中你可以直接测试POST PUT GET等方法,总是很牛逼有没有!!分分钟做一套API啊!!比java web快出了不知道多少倍!!!明天我们继续深入探测这个东西!!!!!