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         
相关文章
|
5月前
|
存储 数据库 文件存储
掌握Django文件处理:一步步构建上传功能
文件上传算是一种很常见的需求,几乎构建很多项目系统,以及插件都需要用到。 通过上面例子可以看到django通过forms表单的形式灵活定义文件上传的页面,字段,以及数据库存储。 在实际项目中我们还要考虑到安全性,包括检查文件大小(可通过FileField的max_length属性设置)、防止路径遍历攻击。 还需注意服务器端的验证,比如检查文件类型、内容安全等。
|
1月前
|
前端开发 JavaScript UED
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
通过在Django项目中集成Channels和WebSocket,我们能够为前后端分离的应用添加实时通信功能,实现诸如在线聊天、实时数据更新等交互式场景。这不仅增强了应用的功能性,也提升了用户体验。随着实时Web应用的日益普及,掌握Django Channels和WebSocket的集成将为开发者开启新的可能性,推动Web应用的发展迈向更高层次的实时性和交互性。
75 1
|
11天前
|
程序员 API 数据库
Django/Flask深度揭秘:揭秘那些让程序员爱不释手的神奇功能!
在Web开发领域,Django与Flask凭借其独特魅力和强大功能深受程序员喜爱。Django作为全能型框架,以其ORM、模板引擎和丰富的内置功能著称;Flask则以轻量级、灵活的路由系统和强大的扩展生态见长。两者各具特色,为开发者提供了高效、灵活的开发工具。
32 4
|
1月前
|
存储 Python
使用django构建一个多级评论功能
使用django构建一个多级评论功能
20 0
|
3月前
|
存储 关系型数据库 MySQL
基于python django 医院管理系统,多用户功能,包括管理员、用户、医生,数据库MySQL
本文介绍了一个基于Python Django框架开发的医院管理系统,该系统设计了管理员、用户和医生三个角色,具备多用户功能,并使用MySQL数据库进行数据存储和管理。
130 4
基于python django 医院管理系统,多用户功能,包括管理员、用户、医生,数据库MySQL
|
4月前
|
存储 NoSQL 中间件
【Django+Vue3 线上教育平台项目实战】登录功能模块之短信登录与钉钉三方登录
在当今的数字化时代,用户认证是任何在线服务安全性的基石。本文将简明扼要地介绍登录注册流程中的核心概念:HTTP无状态性、Session、Token与JWT,并详细阐述两种实用登录方式—— 手机号登录验证(借助容联云/云通讯服务) 与钉钉第三方登录。我们将探讨这些概念的基本原理,并深入解析两种登录方式的实现流程,旨在帮助开发者提升用户认证的安全性与便捷性。
【Django+Vue3 线上教育平台项目实战】登录功能模块之短信登录与钉钉三方登录
|
4月前
|
前端开发 JavaScript API
【Django+Vue3 线上教育平台项目实战】构建课程详情页与集成视频播放功能
随着数字化教育的兴起,构建一个高效、用户友好的线上教育平台至关重要。本文将探讨如何使用Django与Vue.js 3结合,实现一个包含课程列表和课程详情页(含视频播放功能)的线上教育平台部分。本文主要介绍了如何设计数据库模型、处理数据查询、构建动态前端界面,并集成视频播放功能,为用户带来流畅的学习体验。
【Django+Vue3 线上教育平台项目实战】构建课程详情页与集成视频播放功能
|
3月前
|
数据可视化 安全 前端开发
基于Django的美团药品数据分析与可视化系统,有多用户功能,可增删改查数据
本文介绍了一个基于Django框架开发的美团药品数据分析与可视化系统,该系统具备多用户功能,支持数据的增删改查操作,并采用MySQL、pandas、echarts和bootstrap技术栈,为用户提供了一个高效、安全且实用的药品数据管理和分析平台。
基于Django的美团药品数据分析与可视化系统,有多用户功能,可增删改查数据
|
4月前
|
存储 数据库 文件存储
掌握Django文件处理:一步步构建上传功能
掌握Django文件处理:一步步构建上传功能
62 3
|
4月前
|
前端开发 JavaScript API
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
【7月更文挑战第17天】现代Web开发趋势中,前后端分离配合WebSocket满足实时通信需求。Django Channels扩展了Django,支持WebSocket连接和异步功能。通过安装Channels、配置设置、定义路由和消费者,能在Django中实现WebSocket交互。前端使用WebSocket API连接后端,实现双向数据流,如在线聊天功能。集成Channels提升Web应用的实时性和用户体验,适应实时交互场景的需求。**
184 6