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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343