Django1.10 扩展User属性增加头像上传功能

简介:

Django自带的User模型没有头像和电话这两项属性,因此需要通过扩展User达到我们想要的效果,根据官方的文档,扩展新字段到User只需要用one-to-one模型即可。


一、创建一个APP

1
python manage.py startapp CustomUser


二、在models里面创建用户模型,使用one-to-one关联User

1
2
3
4
5
6
7
8
9
10
11
12
from  __future__  import  unicode_literals
 
from  django.db  import  models
 
# Create your models here.
 
from  django.contrib.auth.models  import  User
 
class  MyUser(models.Model):
     user  =  models.OneToOneField(User)
     phone  =  models.CharField(max_length = 20 , null = True , blank = True )
     avatar  =  models.ImageField(upload_to = 'photo' , null = True , blank = True )


三、增加admin配置,admin后台可以填写这两个新字段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from  django.contrib  import  admin
from  django.contrib.auth.admin  import  UserAdmin
from  django.contrib.auth.models  import  User
 
from  CustomUser.models  import  MyUser
 
# Define an inline admin descriptor for Employee model
# which acts a bit like a singleton
class  EmployeeInline(admin.StackedInline):
     model  =  MyUser
     can_delete  =  False
     verbose_name_plural  =  'myuser'
 
# Define a new User admin
class  UserAdmin(UserAdmin):
     inlines  =  (EmployeeInline, )
 
# Re-register UserAdmin
admin.site.unregister(User)
admin.site.register(User, UserAdmin)

admin后台效果:

wKiom1esQOuxz_30AABMQnPFPhw935.png-wh_50



四、修改settings User指向:

1
AUTH_PROFILE_MODULE  =  'CustomUser.MyUser'


五、生成数据库:

1
2
python manage.py makemigrations CustomUser
python manage.py migrations


六、上传头像需要media配置,故settings需增加配置:

1
2
MEDIA_URL  =  '/media/'
MEDIA_ROOT  =  os.path.join(BASE_DIR,  'media' )

在manage.py同一层新建media目录


七、配置urls.py:

1
2
3
4
from  django.conf  import  settings
from  django.conf.urls.static  import  static
 
urlpatterns  + =  static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)


八、template上使用头像:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
< ul  class = "nav navbar-nav navbar-right" >
    < li  class = "dropdown navbar-user" >
       < a  href = "javascript:;"  class = "dropdown-toggle"  data-toggle = "dropdown" >
          < img  src = "{{ request.user.myuser.avatar.url }}"  alt = ""  />
          < span  class = "hidden-xs" >{{ request.user.username }}</ span > < b  class = "caret" ></ b >
       </ a >
       < ul  class = "dropdown-menu animated fadeInLeft" >
          < li  class = "arrow" ></ li >
          < li >< a  href = "javascript:;" >编辑资料</ a ></ li >
          < li >< a  href = "javascript:;" >重置密码</ a ></ li >
          < li  class = "divider" ></ li >
          < li >< a  href = "{{ url('logout') }}" >退出系统</ a ></ li >
       </ ul >
    </ li >
</ ul >
本文转自运维笔记博客51CTO博客,原文链接http://blog.51cto.com/lihuipeng/1836996如需转载请自行联系原作者                                                                                                                                                                                           lihuipeng         
相关文章
|
8天前
|
数据处理 数据库 开发者
Django中的自定义管理命令:扩展管理功能的途径
【4月更文挑战第15天】Django教程:介绍如何创建和使用自定义管理命令以扩展框架功能。在应用的`management/commands`目录下创建Python文件,继承`BaseCommand`,实现`handle`方法。示例代码展示了如何定义参数和执行逻辑。自定义命令适用于批量数据处理、定期任务、项目初始化和自定义迁移操作。注意文件位置、命令安全性和稳定性。自定义管理命令能提升开发和维护效率。
|
测试技术 数据库 数据安全/隐私保护
Django 继承AbstractUser扩展用户模型
Django 继承AbstractUser扩展用户模型
106 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扩展类与三级视图、视图集与路由
127 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模型即可。
7367 0
|
数据安全/隐私保护 Python