Django1.11 擴充User屬性增加頭像上傳功能

來源:互聯網
上載者:User

Django內建的User模型沒有頭像和電話這兩項屬性,因此需要通過擴充User達到我們想要的效果,根據官方的文檔,擴充新欄位到User只需要用one-to-one(一對一)模型即可。

一、建立一個APP

python manage.py startapp CustomUser

二、在models裡面建立使用者模型,使用one-to-one關聯User

from django.db import models# Create your models here.from django.contrib.auth.models import Userclass MyUser(models.Model):    user = models.OneToOneField(User)    phone = models.CharField(u'手機號',max_length=13, null=True, blank=True)    avatar = models.ImageField(u'管理員頭像',upload_to='images', null=True, blank=True)    class Meta:        verbose_name = u'頭像管理'

三、增加admin配置,admin後台可以填寫這兩個新欄位:

from django.contrib import adminfrom django.contrib.auth.admin import UserAdmin as BaseUserAdminfrom django.contrib.auth.models import Userfrom CustomUser.models import MyUser# Define an inline admin descriptor for Employee model# which acts a bit like a singletonclass EmployeeInline(admin.StackedInline):    model = MyUser    can_delete = False    verbose_name_plural = u'管理中心'# Define a new User adminclass UserAdmin(BaseUserAdmin):    inlines = (EmployeeInline, )# Re-register UserAdminadmin.site.unregister(User)admin.site.register(User, UserAdmin)

admin後台效果:

四、修改settings User指向:

AUTH_USER_MODULE = 'CustomUser.MyUser'

五、產生資料庫:

python manage.py makemigrations CustomUser

python manage.py migrations

六、上傳頭像需要media配置,故settings需增加配置:

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

在manage.py同一層建立media目錄

七、配置urls.py:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

八、template上使用頭像:

<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>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.