1.安装虚拟环境

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

2.创建项目

django-admin startproject myuser

3.添加drf应用

在settings.py的INSTALLED_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": "",

    },

}

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.

\lib\site-packages\django\db\backends\mysql\base.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.编写继承drf原user模型的模型:

代码如下:

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/

进行新增数据,如下:

可以删除数据(比如id为2的):

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

查询全部:

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

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

更新id为3 的数据:

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完成

Django继承drf的user模型的demo的更多相关文章

  1. Django的DRF序列化方法

    安装rest_framework -- pip install djangorestframework -- 注册rest_framework序列化 -- Python--json -- 第一版 用v ...

  2. 写写Django中DRF框架概述以及序列化器对象serializer的构造方法以及使用

    写写Django中DRF框架概述以及序列化器对象serializer的构造方法以及使用 一.了解什么是DRF DRF: Django REST framework Django REST framew ...

  3. Django:学习笔记(7)——模型进阶

    Django:学习笔记(7)——模型进阶 模型的继承 我们在面向对象的编程中,一个很重要的的版块,就是类的继承.父类保存了所有子类共有的内容,子类通过继承它来减少冗余代码并进行灵活扩展. 在Djang ...

  4. Django基础核心技术之Model模型的介绍与设计

    Django基础核心技术之Model模型的介绍与设计原创: Yunbo Shi Python Web与Django开发 2018-05-03Django网络应用开发的5项基础核心技术包括模型(Mode ...

  5. [Python] Django框架入门2——深入模型

    说明: 本文主要深入了解模型(models.py),涉及ORM简介.模型定义.模型成员.模型查询.自连接等.需要一定基础,可以先走一走基本入门流程. 附录一使用mysql数据库,附录二Django开发 ...

  6. Django文档阅读之模型

    模型 模型是您的数据唯一而且准确的信息来源.它包含您正在储存的数据的重要字段和行为.一般来说,每一个模型都映射一个数据库表. 基础: 每个模型都是一个 Python 的类,这些类继承 django.d ...

  7. Django:学习笔记(6)——模型

    Django:学习笔记(6)——模型 快速上手 模型到底是什么呢?我们可以想,如果一张数据表的各个字段可以自动映射到一个类的各个属性,则每条记录对应这个类的一个对象.那我们通过类方法来操作对象(即表记 ...

  8. Django框架 之 ORM中介模型

    Django框架 之 ORM中介模型 中介模型 处理类似搭配 pizza 和 topping 这样简单的多对多关系时,使用标准的ManyToManyField  就可以了.但是,有时你可能需要关联数据 ...

  9. django继承修改 User表导致的问题 fields.E304(permissions/group都会有这样的错误)

    问题: django继承修改 User表时,进行migrations操作时会导致的问题 fields.E304(permissions/group都会有这样的错误)如图: 根源: django文档中有 ...

随机推荐

  1. select id from BS_BU_RULETYPE t start with t.PARENT_ID = 175 connect by t.PARENT_ID = prior t.id

    select id from BS_BU_RULETYPE t start with t.PARENT_ID = 175 connect by t.PARENT_ID = prior t.id

  2. Maven快速创建SpringMVC web(1)

     Maven快速创建SpringMVC web工程详解  转自:http://blog.csdn.net/cndmss/article/details/52184836

  3. 记录一下自己搭建springboot+mybatis+druid 多数据源的过程

    前言  上次的一个项目(springboot+mybatis+vue),做到后面的时间发现需要用到多数据源.当时没有思路..后来直接用了jdbc来实现.这几天不是很忙,所以决定自己再搭建一次.不多说, ...

  4. [消灭虫子] Qt 套接字发不出去东西

    最近状态不是太好,导致出现bug之后心烦意乱的 遇到这样的事情,就是在 这样的函数执行之后服务端收不到任何消息,但是在调试台显示已经发送了正常的字节数. 表示大概已经发出去了,但是我确定服务端没有问题 ...

  5. ($children,$refs,$parent)的使用

    如果项目很大,组件很多,怎么样才能准确的.快速的寻找到我们想要的组件了?? $refs 首先你的给子组件做标记.demo :<firstchild ref="one"> ...

  6. 吴裕雄 python 机器学习——多项式贝叶斯分类器MultinomialNB模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,naive_bayes from skl ...

  7. 503,display:none;与visibility:hidden;的区别

    联系:他们都能让元素不可见 区别: display:none:会让元素从渲染树中消失,渲染的时候不占据任何空间: visibility:hidden:不会让元素从渲染树中消失,渲染时袁旭继续占据空间, ...

  8. 每天进步一点点------SOPC的Avalon-MM IP核(二) AVALON总线的IP核定制

    简介 NIOS II是一个建立在FPGA上的嵌入式软核处理器,除了可以根据需要任意添加已经提供的外设外,用户还可以通过定制用户逻辑外设和定制用户指令来实现各种应用要求.这节我们就来研究如何定制基于Av ...

  9. 每天进步一点点------SysTimer

    /******************************************************************** * 文 件 名:SysTimer_test.c * 功 能: ...

  10. C++ string类的使用

    C++ string的使用 在了解如何使用string类之前,我们先来看看C语言中使用字符串有多麻烦: 调用头文件:cstring 定义一个C字符串: char str1[51]="Hell ...