zoukankan      html  css  js  c++  java
  • Django继承drf的user模型的demo

    1.安装虚拟环境

    #mkvirtualenv drfdemo -p python3
    #pip install django
    #pip install djangorestframework
    #pip install pymysql

    2.创建项目

    django-admin startproject myuser

    3.添加drf应用

    settings.pyINSTALLED_APPS中添加'rest_framework'

    INSTALLED_APPS = [
    
        ...
    
        'rest_framework',
    
     
    
    ]

    4.创建数据库

     create database myuser;

    5.修改项目数据库连接配置

    settings.py配置文件中设置mysql的账号密码

    DATABASES = {
    
        # 'default': {
    
        #     'ENGINE': 'django.db.backends.sqlite3',
    
        #     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    
        # }
    
        'default': {
    
            'ENGINE': 'django.db.backends.mysql',
    
            'NAME': "myuser",
    
            "HOST": "127.0.0.1",
    
            "PORT": 3306,
    
            "USER": "root",
    
            "PASSWORD": "123456",
    
        },
    
    }

    6.主引用中__init__.py设置使用pymysql作为数据库驱动

    import pymysql
    
    pymysql.install_as_MySQLdb()

    7.修改mysql会遇到的两个问题:

    (1)'mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__

        raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)

    django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.

      libsite-packagesdjangodbackendsmysqlase.py 里面进行注释

    (2)query = query.decode(errors='replace')

    AttributeError: 'str' object has no attribute 'decode'

    backends/mysql/operations.py146行里面新增一个行代码:

    query = query.encode()

    8.创建app

    python manage.py startapp userinfo

    9.添加userinfo应用(代码修改为)

    INSTALLED_APPS = [
    
        'django.contrib.admin',
    
        'django.contrib.auth',
    
        'django.contrib.contenttypes',
    
        'django.contrib.sessions',
    
        'django.contrib.messages',
    
        'django.contrib.staticfiles',
    
     
    
        'rest_framework',
    
        'userinfo',
    
    ]

    settings添加一条user模型继承的配置:

    # 继承模型的认证
    
    AUTH_USER_MODEL = "userinfo.User"

    10.编写继承drfuser模型的模型:

    代码如下:

    from django.contrib.auth.models import AbstractUser
    
    from django.db import models
    
     
    
     
    
    class User(AbstractUser):
    
        # 只添加手机号一个字段
    
        mobile = models.CharField(max_length=100)

    11.总路由为:

    from django.contrib import admin
    
    from django.urls import path,include
    
     
    
    urlpatterns = [
    
        path('admin/', admin.site.urls),
    
        path('user/', include("userinfo.urls")),

    12.app应用下的路由为:

    from rest_framework.routers import DefaultRouter
    
    from userinfo import views
    
     
    
    urlpatterns = []  # 路由列表
    
    router = DefaultRouter()  # 可以处理视图的路由器
    
     
    
    router.register('userinfo', views.UserAPIView)  # url进行注册
    
     
    
    urlpatterns += router.urls  # 将路由器中的所有路由信息追加到django的路由列表中
    
    print(urlpatterns)

    13.序列化器代码:

    from rest_framework import serializers
    
    from userinfo.models import User
    
     
    
    # 创建序列化器类,回头会在视图中被调用
    
    class UserModelSerializer(serializers.ModelSerializer):
    
        class Meta:
    
            model = User
    
            fields = "__all__"
    
     
    
        def create(self, validated_data):
    
            # 调用当前模型序列化器父类的create
    
            user = super().create(validated_data)
    
            # 对密码进行加密,还可以使用 make_password
    
            user.set_password(user.password)
    
            user.save()
    
     
    
            return user

    14.视图代码为:

    from rest_framework.viewsets import ModelViewSet
    
    from userinfo.models import User
    
    from userinfo.serializers import UserModelSerializer
    
     
    
     
    class UserAPIView(ModelViewSet):
        queryset = User.objects.all()
        serializer_class = UserModelSerializer

    15.迁移:

    python manage.py makemigrations
    python manage.py migrate

    最后成功生成了,继承drf中的原生user模型:

     

    16.进行增删改成测试:

    可以使用:

    http://127.0.0.1:8000/user/userinfo/

    进行新增数据,如下:

    可以删除数据(比如id2)

    http://127.0.0.1:8000/user/userinfo/2/

    查询全部:

    http://127.0.0.1:8000/user/userinfo/

    数据只剩一个(原来添加了id为1,2的两个数据)

    更新id3 的数据:

    http://127.0.0.1:8000/user/userinfo/3/

        {

            "id": 3,

            "password": "4142432",

            "is_superuser": false,

            "username": "three01",

            "mobile": "17644551518"

        }

    最后导出相应的库文件:

    # 命令:pip freeze > requirements.txt

    Django==2.2.4

    djangorestframework==3.10.2

    PyMySQL==0.9.3

    pytz==2019.2

    sqlparse==0.3.0

    这样直接继承原生的user模型的demo完成

  • 相关阅读:
    网站图片上传,水印,预览,截图
    go语言中的数组切片:特立独行的可变数组
    Android ADB server didn't ACK * failed to start daemon * 简单有效的解决方案
    MongoDB删除文档
    顺为资本CEO许达来:为什么说中国创业者很幸福?(附PPT)
    星瀚资本杨歌:我七次创业失败的内心感悟(比较真实,可以看看创业的36条军规)
    晨兴资本刘芹:入行16年我才刚理解创投,有8个最深感悟
    20 个免费开源的 CSS3 用户界面工具包
    Google浏览器的缓存文件过大(mega网站导致的)
    FastSocket客户端/服务端通讯示例
  • 原文地址:https://www.cnblogs.com/hszstudypy/p/11595889.html
Copyright © 2011-2022 走看看