一.2.序列化使用之用户资源功能app
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),"")
In [11]: create_user("rock")
In [12]: create_user("panda")
In [13]: create_user("wd")
In [14]: create_user("pc")
刷新后如下图,拿到数据了:
IdcViewset
最新文章
- java for循环冒泡排序
- Scala:使用Sublime开发Scala
- 新建PCH文件以及常用宏定义
- jquery 自动跳出列表
- Ext布局篇
- 在ios8上 [TableView setSeparatorInset:UIEdgeInsetsMake(0,0,0,0)];不起作用 经过测试加入下面方法 在ios7 8上都可以正常工作
- Spring框架xml配置中属性ref与value的区别
- python测试开发django-1.开始hello world!
- odoo8 和odoo10区别
- selenium验证码和错误截图
- 960网格,一个web时代的标志。
- SP211 PRIMIT - Primitivus recurencis(欧拉回路)
- codeforces 766E Mahmoud and a xor trip
- openshift 持续集成与部署 -- 构建部署流水线
- (转)js在数组中删除重复的元素自保留一个(两种实现思路)
- ecshop和ucenter的整合
- Pi 在Windows下面使用远程桌面登录
- Bootstrap初学基础总结
- 初学者手册-Sublime Text常用快捷键
- ubuntu 16.04 vscode + php debug