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.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的更多相关文章
- Django的DRF序列化方法
安装rest_framework -- pip install djangorestframework -- 注册rest_framework序列化 -- Python--json -- 第一版 用v ...
- 写写Django中DRF框架概述以及序列化器对象serializer的构造方法以及使用
写写Django中DRF框架概述以及序列化器对象serializer的构造方法以及使用 一.了解什么是DRF DRF: Django REST framework Django REST framew ...
- Django:学习笔记(7)——模型进阶
Django:学习笔记(7)——模型进阶 模型的继承 我们在面向对象的编程中,一个很重要的的版块,就是类的继承.父类保存了所有子类共有的内容,子类通过继承它来减少冗余代码并进行灵活扩展. 在Djang ...
- Django基础核心技术之Model模型的介绍与设计
Django基础核心技术之Model模型的介绍与设计原创: Yunbo Shi Python Web与Django开发 2018-05-03Django网络应用开发的5项基础核心技术包括模型(Mode ...
- [Python] Django框架入门2——深入模型
说明: 本文主要深入了解模型(models.py),涉及ORM简介.模型定义.模型成员.模型查询.自连接等.需要一定基础,可以先走一走基本入门流程. 附录一使用mysql数据库,附录二Django开发 ...
- Django文档阅读之模型
模型 模型是您的数据唯一而且准确的信息来源.它包含您正在储存的数据的重要字段和行为.一般来说,每一个模型都映射一个数据库表. 基础: 每个模型都是一个 Python 的类,这些类继承 django.d ...
- Django:学习笔记(6)——模型
Django:学习笔记(6)——模型 快速上手 模型到底是什么呢?我们可以想,如果一张数据表的各个字段可以自动映射到一个类的各个属性,则每条记录对应这个类的一个对象.那我们通过类方法来操作对象(即表记 ...
- Django框架 之 ORM中介模型
Django框架 之 ORM中介模型 中介模型 处理类似搭配 pizza 和 topping 这样简单的多对多关系时,使用标准的ManyToManyField 就可以了.但是,有时你可能需要关联数据 ...
- django继承修改 User表导致的问题 fields.E304(permissions/group都会有这样的错误)
问题: django继承修改 User表时,进行migrations操作时会导致的问题 fields.E304(permissions/group都会有这样的错误)如图: 根源: django文档中有 ...
随机推荐
- mongo日常命令集锦
查询某个字段是否存在 db.student.findOne({name:{$exists:true}}) db.student.findOne({'department.name':{$exists: ...
- mysql修改密码的4种方式
转:https://www.cnblogs.com/jdxn/p/6847089.html 方法1: 用SET PASSWORD命令 首先登录MySQL. 格式:mysql> set passw ...
- hadoop3.1.1 HA高可用分布式集群安装部署
1.环境介绍 涉及到软件下载地址:https://pan.baidu.com/s/1hpcXUSJe85EsU9ara48MsQ 服务器:CentOS 6.8 其中:2 台 namenode.3 台 ...
- next.config.js
const configs = { // 编译文件的输出目录 distDir: 'dest', // 是否给每个路由生成Etag generateEtags: true, // 页面内容缓存配置 on ...
- [NLP]Transformer模型解析
简介[2] Attention Is All You Need是2017年google提出来的一篇论文,论文里提出了一个新的模型,叫Transformer,这个结构广泛应用于NLP各大领域,是目前比较 ...
- js处理文章详情页点击量统计
具体需求:在文章管理系统中,需要统计文章详情页面的点击量,来体现该文章是否受用户欢迎,方便管理员调整日后编辑新文章时的内容方向. 解决方案:设置有过期时间的cookie 我们在访问文章详情页面时,拿到 ...
- queue 官方运用
import threading import random,time import queue q_init = queue.Queue(maxsize=5) import logging logg ...
- [AST Babel Plugin] Transform code, add line:column number for console log
For example we have current code: function add(a, b) { console.log(a, b) return a + b } function sub ...
- Ubuntu 16 安装Nginx+Php+Mysql
嗯哼,结束外派,我胡汉三又回来了,回来第一件事,就是重新装服务器,搭环境,以前用的apache,最近改了nginx,来吧,从头开始 因为以前一直用apache,这次换一个nginx试试. 1.更新系统 ...
- python中的while
while循环 循环就是一个重复的过程,不断的重复.while循环又称条件循环 while 条件: code 1 code 2 code 3 ... ##实现ATM的输入密码重新输入的功能 while ...