我翻了一遍网上的代码,发现有很多类似的,但是有些根本跑不通,很乱。
花了挺长时间,自己终于熟悉了接口的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这个软件,没有的可以下载一个。
官网地址:
用户注册:
在url上输入http://127.0.0.1:8000/api/register/。
方法选择post,然后输入我们userinfo定义的数据。
查看数据库:
用户登录:
在url上输入http://127.0.0.1:8000/api/auth/。
方法选择post,然后输入我们用户名和密码。
八、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到数据库里面的数据了