这篇文章主要介绍了Django rest framework自定义用户表的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。说明DjanGo 默认的用户表 auth_user
这篇文章主要介绍了Django rest framework自定义用户表的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
DjanGo 默认的用户表 auth_user
包含 id, passWord, last_login, is_superuser, username, last_name, email, is_staff, is_active, date_joined, first_name 字段。这些基本字段不够用时,在此基本表上拓展字段是很好选择。本文介绍在 DRF(Django Rest Framework) 上使用自定义用户表进行接口访问控制的功能设计。
先装必要的模块
pip install djangopip install djangorestframework
创建项目文件夹、项目和应用
E:\SweetYaya> mkdir MyProj01E:\SweetYaya> cd MyProj01E:\SweetYaya\MyProj01> django-admin startproject MyProj01 .E:\SweetYaya\MyProj01> django-admin startapp MyApp
同步数据库
E:\SweetYaya\MyProj01> python manage.py migrateOperations to perfORM: Apply all migrations: admin, auth, contenttypes, sessionsRunning migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK ... Applying sessions.0001_initial... OK
执行如下命令后测试访问 Http://127.0.0.1:8000/
E:\SweetYaya\MyProj01>Python manage.py runserverWatching for file changes with StatReloaderPerforming system checks...System check identified no issues (0 silenced).June 07, 2021 - 21:16:57Django version 3.2.4, using settings 'MyProj01.settings'Starting development server at http://127.0.0.1:8000/Quit the server with CTRL-BREAK.
打开 MyApp/models.py
文件,创建继承自 AbstractUser
的 UserProfile
类,给它添加 name
和 mobile
字段,它就是我们自定义的用户表。
from django.db import modelsfrom django.contrib.auth.models import AbstractUserclass UserProfile(AbstractUser): name = models.CharField(max_length=30, null=True, blank=True, verbose_name="姓名") mobile = models.CharField(max_length=11, verbose_name="电话") class Meta: verbose_name = "用户" verbose_name_plural = "用户" def __str__(self): return self.name
我们直接在 MyProj01/url.py
中进行定义序列化方法和路由配置
from django.urls import path, includefrom MyApp.models import UserProfilefrom rest_framework import routers, serializers, viewsets# Serializers define the api representation.class UserSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = UserProfile fields = ['url', 'username', 'name', 'mobile', 'email', 'is_staff']# ViewSets define the view behavior.class UserViewSet(viewsets.ModelViewSet): queryset = UserProfile.objects.all() serializer_class = UserSerializer# Routers provide an easy way of automatically determining the URL conf.router = routers.DefaultRouter()router.reGISter('users', UserViewSet)# Wire up our API using automatic URL routing.# Additionally, we include login URLs for the browsable API.urlpatterns = [ path('', include(router.urls)), path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))]
找到 MyProj01/settings.py
,做如下配置
加入上面创建的应用和 rest_framework
INSTALLED_APPS = [ 'django.contrib.admin',... 'rest_framework', 'MyApp',]
添加全局认证设置
REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.IsAuthenticated' ]}
修改默认用户表,至此 settings.py
全部配置完成了。
AUTH_USER_MODEL = 'MyApp.UserProfile'
执行 makemigrations
命令
E:\SweetYaya\MyProj01> python manage.py makemigrationsMigrations for 'MyApp': MyApp\migrations\0001_initial.py - Create model UserProfile
执行 migrate
命令出现如下错误
E:\SweetYaya\MyProj01> python manage.py migrateTraceback (most recent call last): File "manage.py", line 22, in <module> main() File "manage.py", line 18, in main execute_from_command_line(sys.argv) File "D:\Program Files\python36\lib\site-packages\django\core\management\__init__.py", line 419, in execute_from_command_line utility.execute() File "D:\Program Files\Python36\lib\site-packages\django\core\management\__init__.py", line 413, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "D:\Program Files\Python36\lib\site-packages\django\core\management\base.py", line 354, in run_from_argv self.execute(*args, **cmd_options) File "D:\Program Files\Python36\lib\site-packages\django\core\management\base.py", line 398, in execute output = self.handle(*args, **options) File "D:\Program Files\Python36\lib\site-packages\django\core\management\base.py", line 89, in wrapped res = handle_func(*args, **kwargs) File "D:\Program Files\Python36\lib\site-packages\django\core\management\commands\migrate.py", line 95, in handle executor.loader.check_consistent_history(connection) File "D:\Program Files\Python36\lib\site-packages\django\db\migrations\loader.py", line 310, in check_consistent_history connection.alias,django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency MyApp.0001_initial on database 'default'.
解决办法
先 makemigrations
打开 settings.py
,注释掉 INSTALL_APPS 中的'django.contrib.admin',
打开 urls.py
,注释掉 urlpatterns 中的 admin,再 migrate
就不报错了。最后注意把注释内容恢复回来就好了。
E:\SweetYaya\MyProj01> python manage.py migrateOperations to perform: Apply all migrations: MyApp, admin, auth, contenttypes, sessionsRunning migrations: Applying contenttypes.0001_initial... OK Applying contenttypes.0002_remove_content_type_name... OK ... Applying admin.0003_logentry_add_action_flag_choices... OK Applying sessions.0001_initial... OK
执行命令
E:\SweetYaya\MyProj01>python manage.py runserver
访问 http://127.0.0.1:8000/users/
出现结果如下,此时表明配置成功,但是尚未进行用户登录无权访问。
进入 Python shell
E:\SweetYaya\MyProj01> python manage.py shellPython 3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 03:37:03) [MSC v.1900 64 bit (AMD64)]Type 'copyright', 'credits' or 'license' for more informationIPython 6.5.0 -- An enhanced Interactive Python. Type '?' for help.
键入如下代码
In [1]: from MyApp.models import UserProfileIn [2]: from django.contrib.auth.hashers import make_passwordIn [3]: ist = UserProfile(username='guest01',password=make_password('123456'))In [4]: ist.save()In [5]: ist = UserProfile(username='guest02',password=make_password('123456'))In [6]: ist.save()
然后在数据库中查看 MyApp_userprofile
表发现多了两条记录,添加成功,继续访问 http://127.0.0.1:8000/users/
地址,使用用户密码登录可见如下。测试完成。
感谢你能够认真阅读完这篇文章,希望小编分享的“Django rest framework自定义用户表的方法”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!
--结束END--
本文标题: Django rest framework自定义用户表的方法
本文链接: https://lsjlt.com/news/279693.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0