Django1.10 扩展User属性增加头像上传功能
Django自带的User模型没有头像和电话这两项属性,因此需要通过扩展User达到我们想要的效果,根据官方的文档,扩展新字段到User只需要用one-to-one模型即可。
一、创建一个APP
pythonmanage.pystartappCustomUser
二、在models里面创建用户模型,使用one-to-one关联User
from__future__importunicode_literalsfromdjango.dbimportmodels#Createyourmodelshere.fromdjango.contrib.auth.modelsimportUserclassMyUser(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后台可以填写这两个新字段:
fromdjango.contribimportadminfromdjango.contrib.auth.adminimportUserAdminfromdjango.contrib.auth.modelsimportUserfromCustomUser.modelsimportMyUser#DefineaninlineadmindescriptorforEmployeemodel#whichactsabitlikeasingletonclassEmployeeInline(admin.StackedInline):model=MyUsercan_delete=Falseverbose_name_plural='myuser'#DefineanewUseradminclassUserAdmin(UserAdmin):inlines=(EmployeeInline,)#Re-registerUserAdminadmin.site.unregister(User)admin.site.register(User,UserAdmin)
admin后台效果:
四、修改settings User指向:
AUTH_PROFILE_MODULE='CustomUser.MyUser'
五、生成数据库:
pythonmanage.pymakemigrationsCustomUserpythonmanage.pymigrations
六、上传头像需要media配置,故settings需增加配置:
MEDIA_URL='/media/'MEDIA_ROOT=os.path.join(BASE_DIR,'media')
在manage.py同一层新建media目录
七、配置urls.py:
fromdjango.confimportsettingsfromdjango.conf.urls.staticimportstaticurlpatterns+=static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
八、template上使用头像:
<ulclass="navnavbar-navnavbar-right"><liclass="dropdownnavbar-user"><ahref="javascript:;"class="dropdown-toggle"data-toggle="dropdown"><imgsrc="{{request.user.myuser.avatar.url}}"alt=""/><spanclass="hidden-xs">{{request.user.username}}</span><bclass="caret"></b></a><ulclass="dropdown-menuanimatedfadeInLeft"><liclass="arrow"></li><li><ahref="javascript:;">编辑资料</a></li><li><ahref="javascript:;">重置密码</a></li><liclass="divider"></li><li><ahref="{{url('logout')}}">退出系统</a></li></ul></li></ul>
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。