06.Django中用户的两种扩展方式(Profile和AbstractUser)

简介: 1:profile扩展 正常建立一个项目: python-admin.py startproject myweb 建立子项目 manage.py startapp user 子项目配置如下: models.
1:profile扩展
正常建立一个项目:

python-admin.py startproject myweb

建立子项目
manage.py startapp user

子项目配置如下:
models.py
from django.db import models
from django.contrib.auth.models import User #导入admin的User
from django.db.models.signals import post_save

# Create your models here.

class UserProfile(models.Model):
user = models.OneToOneField(User)
description = models.TextField(max_length=51200)
scope = models.IntegerField(default=100)
admin.py
#coding:utf-8
from django.contrib import admin
from django.contrib.auth.models import User
from login.models import UserProfile

# Register your models here.
class ProfileInline(admin.StackedInline): #将UserProfile加入到Admin的user表中
model = UserProfile
verbose_name = 'profile'

class UserProfileAdmin(admin.ModelAdmin):
inlines = (ProfileInline,)

admin.site.unregister(User) #去掉在admin中的注册
admin.site.register(User, UserProfileAdmin) #用userProfileAdmin注册user
views.py
from django.shortcuts import render
from django.http import HttpResponse
from django.contrib.auth.models import User
from login.models import UserProfile
# Create your views here.

def userDemo(request):
desc = User.objects.all()[0]
return HttpResponse(desc)

配置URL:
myweb目录下的url:
from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^login/', include('login.urls'))
]


赋值一份urls.py 到user的目录下,修改urlpatterns 如下:

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
url(r'^login/$', 'login.views.userDemo')
]

数据库的同步:
makemigrations
migrate
syncdb

后台登陆查看


二:继承AbstractUser


新建一个项目如Profile所示
myweb修改添加如下语句:
AUTH_USER_MODEL = 'login.User'
login中:
models.py
from django.db import models
from django.contrib.auth.models import AbstractUser

# Create your models here.

class User(AbstractUser): #继承AbstractUser
desc = models.TextField()
admin.py
#coding:utf-8
from django.contrib import admin

# Register your models here.
from login.models import User
admin.site.register(User)
其余的URL配置  ,views.py配置和settings.py的部分配置同profile的配置方式

数据库的同步:
makemigrations
migrate
syncdb

后台登陆即可
相关文章
|
20天前
|
数据处理 数据库 开发者
Django中的自定义管理命令:扩展管理功能的途径
【4月更文挑战第15天】Django教程:介绍如何创建和使用自定义管理命令以扩展框架功能。在应用的`management/commands`目录下创建Python文件,继承`BaseCommand`,实现`handle`方法。示例代码展示了如何定义参数和执行逻辑。自定义命令适用于批量数据处理、定期任务、项目初始化和自定义迁移操作。注意文件位置、命令安全性和稳定性。自定义管理命令能提升开发和维护效率。
|
20天前
|
缓存 API 数据库
Django中的视图装饰器:扩展视图功能的利器
【4月更文挑战第15天】Django视图装饰器用于扩展视图功能,如权限验证、缓存控制和日志记录。它们是Python的高级特性,能不修改原始函数代码就添加新功能。Django提供内置装饰器,如`@login_required`(强制用户登录)、`@cache_page`(缓存视图输出)和`@csrf_protect`(CSRF保护)。同时,开发者可自定义装饰器,例如上面的`timing_decorator`用于记录视图执行时间。使用装饰器时要注意性能影响、执行顺序和参数处理。装饰器增强了代码复用性和可维护性。
|
测试技术 数据库 数据安全/隐私保护
Django 继承AbstractUser扩展用户模型
Django 继承AbstractUser扩展用户模型
107 0
|
存储 JSON 自然语言处理
Python3.7+Django2.0.4配合Mongodb打造高性能高扩展标签云存储方案
书接上回,之前有一篇文章提到了标签云系统的构建:[Python3.7+jieba(结巴分词)配合Wordcloud2.js来构造网站标签云(关键词集合)](https://v3u.cn/a_id_138),但是这篇只是浅显的说明了一下如何进行切词以及前端如何使用wordcloud2.js进行前端展示,本次主要讨论下标签分词切出来之后,如何进行存储。
Python3.7+Django2.0.4配合Mongodb打造高性能高扩展标签云存储方案
|
缓存 前端开发 数据库
【Django学习笔记 - 18】:drf请求响应简介、基类(APIView、GenericAPIView)、mixin扩展类与三级视图、视图集与路由2
【Django学习笔记 - 18】:drf请求响应简介、基类(APIView、GenericAPIView)、mixin扩展类与三级视图、视图集与路由
128 0
【Django学习笔记 - 18】:drf请求响应简介、基类(APIView、GenericAPIView)、mixin扩展类与三级视图、视图集与路由2
|
XML JSON 前端开发
【Django学习笔记 - 18】:drf请求响应简介、基类(APIView、GenericAPIView)、mixin扩展类与三级视图、视图集与路由
【Django学习笔记 - 18】:drf请求响应简介、基类(APIView、GenericAPIView)、mixin扩展类与三级视图、视图集与路由
169 0
【Django学习笔记 - 18】:drf请求响应简介、基类(APIView、GenericAPIView)、mixin扩展类与三级视图、视图集与路由
|
存储 关系型数据库 MySQL
【Django | allauth】useprofile 用户模型扩展
【Django | allauth】useprofile 用户模型扩展
【Django | allauth】useprofile 用户模型扩展
|
JavaScript Python 前端开发
Django1.11 扩展User属性增加头像上传功能
Django自带的User模型没有头像和电话这两项属性,因此需要通过扩展User达到我们想要的效果,根据官方的文档,扩展新字段到User只需要用one-to-one模型即可。
7368 0
|
数据安全/隐私保护 Python