zoukankan      html  css  js  c++  java
  • 一.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),"1234567") 
    In [11]: create_user("rock") 

    In [12]: create_user("panda")

    In [13]: create_user("wd")

    In [14]: create_user("pc")

    刷新后如下图,拿到数据了:

    IdcViewset
  • 相关阅读:
    HBase-scan API 通过scan读取表中数据
    Servlet总结
    【吴节操点评】中国企业SaaS应用深谙未来者寥寥数几 两极分化将加剧
    hibernate实战笔记1---初探
    POJ
    系统服务-----Activity服务的获取getSystemService
    我的编程之路(二十) 新的环境、新的開始
    王爽《汇编语言》第2版-----2、寄存器
    更新智能开发研发进度
    libcurl实现解析(3)
  • 原文地址:https://www.cnblogs.com/dbslinux/p/13090993.html
Copyright © 2011-2022 走看看