1.环境准备:
(1).新建功能app: (python36env) [vagrant@CentOS7 devops]$ python manage.py startapp users ---建议以后用命令行建不要用pycharm (python36env) [vagrant@CentOS7 devops]$ mv users apps/ (python36env) [vagrant@CentOS7 devops]$ ls apps devops logs manage.py __pycache__
(2).激活app:
INSTALLED_APPS = [.....
'idcs.apps.IdcsConfig',
'users.apps.UsersConfig'
]
(3).apps/ursl.py---注意以后的url都如下这样写,而不用再单独建app的urls文件了,项目就只有此一urls文件,所有app的url都注册到路由DefaultRouter()中即可from django.conf.urls import include, url
from django.contrib import admin
from rest_framework.routers import DefaultRouter
from idcs.views import IdcViewset_v7
route = DefaultRouter()
route.register("idcs", IdcViewset_v7, basename="idcs")
route.register("users", UserViewset, basename="users")
urlpatterns = [
url(r'^', include(route.urls)) ---->把route中的app的路由转换成django的路由
]
(4).apps/idcs/views.py中:
########################## 版本七 ############################ from rest_framework import viewsets class IdcViewset_v7(viewsets.ModelViewSet): queryset = Idc.objects.all() serializer_class = IdcSerializer
(python36env) [vagrant@CentOS7 devops]$ python manage.py runserver 0.0.0.0:8000 运行后效果如下

2.写users用户资源功能:
(1)用户模型django内置已写,所以这里我不写了
(python36env) [vagrant@CentOS7 devops]$ python manage.py dbshell
MariaDB [devops]> desc auth_user; --查看有哪些字段
(2)写用户资源的序列化文件users/serializers.py
from rest_framework import serializers #新建序列化类并继承序列化模块中的序列化类 class UserSerializer(serializers.Serializer): ''' 用户序列化类 ''' #开始写给前端返回的字段--返回给前端调用者的数据类型 username = serializers.CharField() email = serializers.EmailField()
(3)写用户资源的viewset视图,注意对一个资源一般有5种操作(get,put,push,delete,)'''注意对一个资源一般有如下5种操作:所以这里要考虑这个UserViewset类要实现哪几个操作(如果用户添加,删除都要则如下5种都用),但是
这里我实现的是只能获取不能修改的功能,所以这个类只需继承readonly这个viewset类即可
get:
list
get 单个对象
create
update
delete
'''
users/views.py中:
from django.shortcuts import render from rest_framework import viewsets #from django.contrib.auth.models import User 以后建议换成下面这种写法 from django.contrib.auth import get_user_model from .serializers import UserSerializer User = get_user_model() class UserViewset(viewsets.ReadOnlyModelViewSet): ''' 这个用户资源的viewset会给外面暴露两个接口retrieve和list retrieve: 返回指定用户信息对象--单个对象的字段是在用户序列化类serializers.py中定义 list: 返回用户列表--列表的字段的字段是在用户序列化类serializers.py中定义 ''' #1.指定queryset queryset = User.objects.all() #2.指定序列化类 serializer_class = UserSerializer
(4)把这个用户资源的viewset注册到router中devops/urls.py中:
from django.conf.urls import include, url from django.contrib import admin from rest_framework.routers import DefaultRouter from idcs.views import IdcViewset from apps.users.views import UserViewset route = DefaultRouter() route.register("idcs", IdcViewset, basename="idcs") #注册时三个参数:资源定位符,类,别名 route.register("users", UserViewset, basename="users") urlpatterns = [ url(r'^', include(route.urls)) ]
(python36env) [vagrant@CentOS7 devops]$ python manage.py makemigrations
(python36env) [vagrant@CentOS7 devops]$ python manage.py migrate
(5)为测试,给它来点数据:
(python36env) [vagrant@CentOS7 devops]$ python manage.py shell 通过django的shell创建用户
In [3]: from django.contrib.auth.models import User In [4]: def create_user(name): ...: for i in range(1,20): ...: username = "{}-{}".format(name,i) ...: User.objects.create_user(username, "{}@51reboot.com".format(username),"1234567")
In [11]: create_user("rock")
In [12]: create_user("panda")
In [13]: create_user("wd")
In [14]: create_user("pc")
刷新后如下图,拿到数据了:
IdcViewset