Django -rest_framework接口的初步书写

我翻了一遍网上的代码,发现有很多类似的,但是有些根本跑不通,很乱。
花了挺长时间,自己终于熟悉了接口的rest_framework接口的编写。
因此,在这里做一些详解。这些都是我亲手实验成功的。
本人用的是Django2.0

rest framework 用于自动生成符合restful规则的API,其中主要有
GET /collection: 从服务器取出资源对象的列表(数组)
GET /collection/resource:从服务器取出单个资源的对象
POST /collection:在服务器新建一个资源(传入数据给服务器)
PUT /collection/resource:在服务器更新资源
DELETE /collection/resource:在服务器删除资源

一、建立一个Django项目,以及相应的APP

这里该项目名称为tool,项目APP为api

django-admin startproject tool
cd tool
python manage.py startapp api

二、下载rest_framework以及对rest_framework的配置

终端输入

pip install djangorestframework
pip install markdown

打开tool/tool/settings.py
配置好rest_framework

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'api',
]
#全局权限控制
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.TokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
    ),
    'PAGE_SIZE': 10
}

三、连接数据库

本人这里用的是Mysql,如果用Django自带的sqlite就直接略过这部分操作
打开tool/tool/_init_.py

import pymysql
pymysql.install_as_MySQLdb()

然后打开tool/tool/settings.py
对数据库的字样进行修改
这里数据库名字、用户名、密码记得改成自己的数据库的数据库、用户名、密码

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mysite_db',
        'USER': 'root',
        'PASSWORD': 'root1234',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

四、models的定制

在tool/api/models.py里,编写一个要用的模型,我这里编写的是UserInfo,里面有三条字段,分别是用户名,密码,邮箱。其中username里面加了一个unique = True,表示这个字段是唯一的,不加也可以。

from django.db import models


class UserInfo(models.Model):
    username = models.CharField(max_length = 32,unique = True)
    password = models.CharField(max_length = 64)
    mail = models.CharField(max_length=32, default=0)

五、URL的定制

这里比较随意,如果严谨一点,应该在tool/api里面新建一个urls.py,然后在tool/tool/urls.py里面include一下。
我这边就直接在tool/tool/urls.py里面写了,进入tool/tool/urls.py

from django.contrib import admin
from django.urls import path
from api import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/auth/', views.AuthView.as_view()),
    path('api/register/', views.RegView.as_view()),
]

这里写了两个url,其中
api/auth/用于用户的登录
api/register/用于用户的注册

六、views的编写

进入tool/api/views.py
这里没有用serializers,等会儿在下面再写一条获取用户名密码的数据的view
分别写了两个方法,
AuthView用于登录
RegView用于注册
用的都是post方法。

from django.http import JsonResponse
from rest_framework.views import APIView
from api import models

class AuthView(APIView):
    def post(self, request, *args, **kwargs):
        ret = {'code':1000, 'msg':None}
        try:
            user = request._request.POST.get('username')
            pwd = request._request.POST.get('password')
            obj = models.UserInfo.objects.filter(username = user, password = pwd).first()
            if not obj:
                ret['code'] = 1010,
                ret['msg'] = "用户名或密码错误"

            ret['msg'] = "用户登录成功"
        except Exception as e:
            pass
        return JsonResponse(ret)

class RegView(APIView):
    def post(self, request, *args, **kwargs):
        ret = {'code': 1001, 'msg': None}
        try:
            user = request._request.POST.get('username')
            pwd = request._request.POST.get('password')
            mail = request._request.POST.get('mail')
            models.UserInfo(username=user, password=pwd, mail=mail)
            models.save()
            ret['msg'] = '用户注册成功'

        except Exception as e:
            pass
        return JsonResponse(ret)


七、接口的验证

利用postman这个软件,没有的可以下载一个。
官网地址:

www.getpostman.com

用户注册:
在url上输入http://127.0.0.1:8000/api/register/
方法选择post,然后输入我们userinfo定义的数据。

postman结果.png

查看数据库:
数据库插入两条数据.png

用户登录:
在url上输入http://127.0.0.1:8000/api/auth/
方法选择post,然后输入我们用户名和密码。

image.png

八、serializers的写法

在tool/api/新建一个serializers.py文件

from rest_framework import serializers
from api import models

class UserSerializer(serializers.ModelSerializer ):
    class Meta:
        model = models.UserInfo
        fields = ['id',  'username', 'password', 'mail']

这里做一下解释。
model = models.UserInfo这里继承的是自己定义的模型
fields里面的项数,自己定,比如我如果想要用户名和密码
那么只需要写成 fields = ['username', 'password']

九、用户查看的view与urls的添加

在tool/tool/urls.py里面添加

path('api/userinfo/', views.UserInfoView.as_view()),

在tool/api/views.py里面添加

from django.shortcuts import HttpResponse
from api import serializers
import json

class UserInfoView(APIView):
    #用于用户信息查找
    def get(self, request, *args, **kwargs):
        # ret = {'code':1001, 'msg':None}
        try:

            user = models.UserInfo.objects.all()
            ser = serializers.UserSerializer(instance=user,many=True)
            ret = json.dumps(ser.data,ensure_ascii=False)
            ret['msg'] = '用户查找成功'

        except Exception as e:
            pass
        return HttpResponse(ret)

十、serializers的检验

在url上输入http://127.0.0.1:8000/api/userinfo/
然后方法选择GET,就能get到数据库里面的数据了

用户查询的检验.png

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容