- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章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) 上使用自定义用户表进行接口访问控制的功能设计.
先装必要的模块 。
1
2
|
pip install django
pip install djangorestframework
|
创建项目文件夹、项目和应用 。
1
2
3
4
|
e:\sweetyaya> mkdir myproj01
e:\sweetyaya> cd myproj01
e:\sweetyaya\myproj01> django-admin startproject myproj01 .
e:\sweetyaya\myproj01> django-admin startapp myapp
|
同步数据库 。
1
2
3
4
5
6
7
8
9
10
|
e:\sweetyaya\myproj01> python manage.py migrate
operations to perform:
apply all migrations: admin, auth, contenttypes, sessions
running 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/ 。
1
2
3
4
5
6
7
8
9
|
e:\sweetyaya\myproj01>python manage.py runserver
watching
for
file changes with statreloader
performing system checks...
system check identified no issues (0 silenced).
june 07, 2021 - 21:16:57
django 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 字段,它就是我们自定义的用户表.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
from django.db import models
from django.contrib.auth.models import abstractuser
class
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 中进行定义序列化方法和路由配置 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
from django.urls import path, include
from myapp.models import userprofile
from 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 。
1
2
3
4
5
6
|
installed_apps = [
'django.contrib.admin'
,
...
'rest_framework'
,
'myapp'
,
]
|
添加全局认证设置 。
1
2
3
4
5
|
rest_framework = {
'default_permission_classes'
: [
'rest_framework.permissions.isauthenticated'
]
}
|
修改默认用户表,至此 settings.py 全部配置完成了.
1
|
auth_user_model =
'myapp.userprofile'
|
执行 makemigrations 命令 。
1
2
3
4
|
e:\sweetyaya\myproj01> python manage.py makemigrations
migrations
for
'myapp'
:
myapp\migrations\0001_initial.py
- create model userprofile
|
执行 migrate 命令出现如下错误 。
。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
e:\sweetyaya\myproj01> python manage.py migrate
traceback (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 就不报错了。最后注意把注释内容恢复回来就好了.
1
2
3
4
5
6
7
8
9
|
e:\sweetyaya\myproj01> python manage.py migrate
operations to perform:
apply all migrations: myapp, admin, auth, contenttypes, sessions
running 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
|
执行命令 。
1
|
e:\sweetyaya\myproj01>python manage.py runserver
|
访问 http://127.0.0.1:8000/users/ 出现结果如下,此时表明配置成功,但是尚未进行用户登录无权访问.
进入 python shell 。
1
2
3
4
|
e:\sweetyaya\myproj01> python manage.py shell
python 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 information
ipython 6.5.0 -- an enhanced interactive python. type
'?'
for
help.
|
键入如下代码 。
1
2
3
4
5
6
7
8
9
10
11
|
in
[1]: from myapp.models import userprofile
in
[2]: from django.contrib.auth.hashers import make_password
in
[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如何自定义用户表的文章就介绍到这了,更多相关django rest framework自定义用户表内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:https://blog.csdn.net/ShyLoneGirl/article/details/117674422 。
最后此篇关于Django rest framework如何自定义用户表的文章就讲到这里了,如果你想了解更多关于Django rest framework如何自定义用户表的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
好的,所以我编辑了以下... 只需将以下内容放入我的 custom.css #rt-utility .rt-block {CODE HERE} 但是当我尝试改变... 与 #rt-sideslid
在表格 View 中,我有一个自定义单元格(在界面生成器中高度为 500)。在该单元格中,我有一个 Collection View ,我按 (10,10,10,10) 固定到边缘。但是在 tablev
对于我的无能,我很抱歉,但总的来说,我对 Cocoa、Swift 和面向对象编程还很陌生。我的主要来源是《Cocoa Programming for OS X》(第 5 版),以及 Apple 的充满
我正在使用 meta-tegra 为我的 NVIDIA Jetson Nano 构建自定义图像。我需要 PyTorch,但没有它的配方。我在设备上构建了 PyTorch,并将其打包到设备上的轮子中。现
在 jquery 中使用 $.POST 和 $.GET 时,有没有办法将自定义变量添加到 URL 并发送它们?我尝试了以下方法: $.ajax({type:"POST", url:"file.php?
Traefik 已经默认实现了很多中间件,可以满足大部分我们日常的需求,但是在实际工作中,用户仍然还是有自定义中间件的需求,为解决这个问题,官方推出了一个 Traefik Pilot[1] 的功
我想让我的 CustomTextInputLayout 将 Widget.MaterialComponents.TextInputLayout.OutlinedBox 作为默认样式,无需在 XML 中
我在 ~/.emacs 中有以下自定义函数: (defun xi-rgrep (term) (grep-compute-defaults) (interactive "sSearch Te
我有下表: 考虑到每个月的权重,我的目标是在 5 个月内分散 10,000 个单位。与 10,000 相邻的行是我最好的尝试(我在这上面花了几个小时)。黄色是我所追求的。 我试图用来计算的逻辑如下:计
我的表单中有一个字段,它是文件类型。当用户点击保存图标时,我想自然地将文件上传到服务器并将文件名保存在数据库中。我尝试通过回显文件名来测试它,但它似乎不起作用。另外,如何将文件名添加到数据库中?是在模
我有一个 python 脚本来发送电子邮件,它工作得很好,但问题是当我检查我的电子邮件收件箱时。 我希望该用户名是自定义用户名,而不是整个电子邮件地址。 最佳答案 发件人地址应该使用的格式是: You
我想减小 ggcorrplot 中标记的大小,并减少文本和绘图之间的空间。 library(ggcorrplot) data(mtcars) corr <- round(cor(mtcars), 1)
GTK+ noob 问题在这里: 是否可以自定义 GtkFileChooserButton 或 GtkFileChooserDialog 以删除“位置”部分(左侧)和顶部的“位置”输入框? 我实际上要
我正在尝试在主页上使用 ajax 在 magento 中使用 ajax 显示流行的产品列表,我可以为 5 或“N”个产品执行此操作,但我想要的是将分页工具栏与结果集一起添加. 这是我添加的以显示流行产
我正在尝试使用 PasswordResetForm 内置函数。 由于我想要自定义表单字段,因此我编写了自己的表单: class FpasswordForm(PasswordResetForm):
据我了解,新的 Angular 7 提供了拖放功能。我搜索了有关 DnD 的 Tree 组件,但没有找到与树相关的内容。 我在 Stackblitz 上找到的一个工作示例.对比drag'ndrop功能
我必须开发一个自定义选项卡控件并决定使用 WPF/XAML 创建它,因为我无论如何都打算学习它。完成后应该是这样的: 到目前为止,我取得了很好的进展,但还有两个问题: 只有第一个/最后一个标签项应该有
我要定制xtable用于导出到 LaTeX。我知道有些问题是关于 xtable在这里,但我找不到我要找的具体东西。 以下是我的表的外观示例: my.table <- data.frame(Specif
用ejs在这里显示日期 它给我结果 Tue Feb 02 2016 16:02:24 GMT+0530 (IST) 但是我需要表现为 19th January, 2016 如何在ejs中执行此操作?
我想问在 JavaFX 中使用自定义对象制作 ListView 的最佳方法,我想要一个每个项目如下所示的列表: 我搜了一下,发现大部分人都是用细胞工厂的方法来做的。有没有其他办法?例如使用客户 fxm
我是一名优秀的程序员,十分优秀!