码迷,mamicode.com
首页 > 其他好文 > 详细

Django继承drf的user模型的demo

时间:2019-09-27 10:40:33      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:rate   生成   print   mysq   连接   demo   dem   database   abstract   

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.

 

  \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.编写继承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完成

 

Django继承drf的user模型的demo

标签:rate   生成   print   mysq   连接   demo   dem   database   abstract   

原文地址:https://www.cnblogs.com/hszstudypy/p/11595889.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!