创建自定义的用户模型类

 1. 用命令创建users 应用

2. 将users 注册到settings.py

  1. INSTALLED_APPS = [
  2. 'django.contrib.admin',
  3. 'django.contrib.auth',
  4. 'django.contrib.contenttypes',
  5. 'django.contrib.sessions',
  6. 'django.contrib.messages',
  7. 'django.contrib.staticfiles',
  8. 'rest_framework',
  9. 'corsheaders',
  10. # 'luf.apps.home',
  11. 'home',
  12. 'xadmin',
  13. 'crispy_forms',
  14. 'reversion',
  15. 'users'
  16. ]

3. 在项目主配置文件中  settings.py

AUTH_USER_MODEL 参数的设置以点.来分隔,表示应用名.模型类名

  1. AUTH_USER_MODEL = 'users.User'

我们自定义的用户模型类还不能直接被Django的认证系统所识别,需要在配置文件中告知Django认证系统使用我们自定义的模型类。

4. 自定义用户模型表

  1. class User(AbstractUser):
  2. """用户模型类"""
  3. mobile = models.CharField(max_length=11, unique=True, verbose_name='手机号')
  4.  
  5. class Meta:
  6. db_table = 'ly_users'
  7. verbose_name = '用户'
  8. verbose_name_plural = verbose_name

5. 进行数据迁移

注意:Django建议我们对于AUTH_USER_MODEL参数的设置一定要在第一次数据库迁移之前就设置好,否则后续使用可能出现未知错误。

  1. python manage.py makemigrations
  2. python manage.py migrate

解决home应用中模型类中的,image字段,url返回给前端格式问题

1.在配置文件中设置

  1. # 访问静态文件的url地址前缀
  2. STATIC_URL = '/static/'
  3.  
  4. # 设置django的静态文件目录
  5. STATICFILES_DIRS = [
  6. os.path.join(BASE_DIR,"luffy/static")
  7. ]
  8.  
  9. # 项目中存储上传文件的根目录[暂时配置],注意,static目录需要手动创建否则上传文件时报错
  10. MEDIA_ROOT=os.path.join(BASE_DIR,"luffy/static")
  11. # 设置访问上传文件的url地址前缀
  12. MEDIA_URL = "/media/" # 避免和STATIC_URL 的路径相同所有用“/media/”

# 当前站点的域名
HOST = "http://api.luf.cn:8000"

  1.  

2. 总路由中设置

  1. from django.contrib import admin
  2. from django.urls import path,include,re_path
  3.  
  4. import xadmin
  5. xadmin.autodiscover()
  6.  
  7. # version模块自动注册需要版本控制的 Model
  8. from xadmin.plugins import xversion
  9. xversion.register_models()
  10. from django.conf import settings
  11. from django.views.static import serve
  12.  
  13. urlpatterns = [
  14. re_path(r'^media/(?P<path>.*)$', serve, {"document_root":settings.MEDIA_ROOT}),
  15. path(r'xadmin/', xadmin.site.urls),
  16. path('admin/', admin.site.urls),
  17. path('home/', include("home.urls")),
  18. path('users/', include("users.urls")),
  19. # include 的值必须是 模块名.urls 格式,字符串中间只能出现一个圆点
  20. ]

3. home /views.py 中:

  1. from django.db.models import Q
  2. from rest_framework.views import APIView
  3. from rest_framework.response import Response
  4. from .models import bannerInfo
  5. from django.conf import settings
  6. class BannerInfoAPIView(APIView):
  7. """
  8. 轮播图列表
  9. """
  10. def get(self,request):
  11. # 获取数据
  12. banners = bannerInfo.objects.filter(Q(is_show=True) & Q(is_delete=False)).order_by("-orders")
  13. # 调整banners的images字段
  14.  
  15. # 序列化
  16. data = []
  17. for item in banners:
  18. data.append({
  19. # 拼接图片的url地址
  20. "image": settings.HOST+item.image.url,
  21. "link":item.link,
  22. "orders":item.orders,
  23. })
  24. return Response(data)

后端轮播模型的调整,让用户可以不上传图片,前端表单提交数据的时候可为空

home/models.py中: 通过设置 null =True  和  blank =True

  1. from django.db import models
  2.  
  3. # Create your models here.
  4.  
  5. class BannerInfo(models.Model):
  6. # update_to 存储子目录,真实存放地址会使用配置中的MADIE_ROOT+upload_to
  7. image = models.ImageField(upload_to='banner',verbose_name='轮播图',null=True,blank=True)
  8. name = models.CharField(max_length=150,verbose_name='轮播图名称')
  9. link = models.CharField(max_length=150,verbose_name='轮播图广告地址')
  10. orders = models.IntegerField(verbose_name='显示顺序')
  11. is_show = models.BooleanField(verbose_name='是否上架',default=False)
  12. is_delete = models.BooleanField(verbose_name='逻辑删除',default=False)
  13. class Meta:
  14. db_table='ly_banner'
  15. verbose_name='轮播图'
  16. verbose_name_plural=verbose_name
  17. def __str__(self):
  18. # 从orm 模型操作中读取的image字段其实是一个对象
  19. # print(type(self.image))
  20. # 真实的图片地址是自动保存到了对象下面的url self.image.url
  21.  
  22. return self.name

后端提供的轮播图数据接口

前端的axios请求函数:banner.vue组件中:

  1. mounted:function () {
  2. //获取轮播图
  3. this.$axios.get('http://api.luf.cn:8000/home/banner').then(res=>
  4.  
  5. {
  6. console.log(res);
  7. this.banner_list=res.data;
  8.  
  9. }).catch(error=>{
  10. console.log(error)
  11. })
  12. }

前端浏览器中点击检查:

5 项目---自定义用户模型以及轮播图图片url返回格式的更多相关文章

  1. 仿百度壁纸客户端(二)——主页自定义ViewPager广告定时轮播图

    仿百度壁纸客户端(二)--主页自定义ViewPager广告定时轮播图 百度壁纸系列 仿百度壁纸客户端(一)--主框架搭建,自定义Tab + ViewPager + Fragment 仿百度壁纸客户端( ...

  2. iview Carousel 轮播图自适应宽高;iview 轮播图 图片重叠问题;iview tabs 高度互相影响问题;vue this问题;

    最终效果图: 一.轮播图中图片自适应宽高:  <Carousel loop v-bind:height="imgHeight+'px'" v-model="caro ...

  3. iview carousel 图片不显示;iview 轮播图 图片无法显示(转载)

    转载来源:https://segmentfault.com/q/1010000016778108 相关代码 <Carousel autoplay v-model="value2&quo ...

  4. React Native 如何做轮播图 react-native-swiper

    //:仿饿了么github:https://github.com/stoneWeb/elm-react-native 欢迎各位同学加入: React-Native群:397885169 大前端群:54 ...

  5. 原生JS面向对象思想封装轮播图组件

    原生JS面向对象思想封装轮播图组件 在前端页面开发过程中,页面中的轮播图特效很常见,因此我就想封装一个自己的原生JS的轮播图组件.有了这个需求就开始着手准备了,代码当然是以简洁为目标,轮播图的各个功能 ...

  6. Vue(小案例_vue+axios仿手机app)_首页(底部导航栏+轮播图+九宫格)

    ---恢复内容开始--- 一.前言                        1.底部导航(两种做法)                                         2.轮播图 ...

  7. 轮播图采用js、jquery实现无缝滚动和非无缝滚动的四种案例实现,兼容ie低版本浏览器

    项目源代码下载地址:轮播图 以下为项目实现效果:(由于gif太大,所以只上传一张图片,但效果完全能实现,经测试,在ie各版本浏览器及chrome,firefox等浏览器中均能实现效果,可以实现点击切换 ...

  8. vue music-抓取歌单列表数据(渲染轮播图)

    下载安装新依赖 babel-runtime:对es6语法进行转译 fastclick:对移动端进行点击300毫秒延迟 ,,取消掉 babel-polyfill:API 先添加,在npm install ...

  9. Swift-ScrollView轮播图的简易封装和使用

    不多说,轮播图是开发中必要一项技能,直接上代码: 先说我的思路:首次继承于UIScrollView类自定义MyScrollView,在MyScrollView里自定制方法,func creatMySc ...

随机推荐

  1. 强大的Django后台管理

    Django 后台 django的后台我们只要加少些代码,就可以实现强大的功能.与后台相关文件:每个app中的 admin.py 文件与后台相关 下面示例是做一个后台添加博客文章的例子: 新建一个 名 ...

  2. 源码编译安装libtool工具

    1. 获取源码 wget http://ftpmirror.gnu.org/libtool/libtool-2.4.6.tar.gz tar xvf libtool-2.4.6.tar.gz -C ~ ...

  3. Ubuntu 汉字显示一半的修复

    部分汉字(例如“复”)显示不正常,只显示一半,其原因是Ubuntu采用的字体Noto Sans CJK优先显示日文汉字,这一问题可以通过修改配置文件/etc/fonts/conf.avail/64-l ...

  4. Docker 安装Hadoop HDFS命令行操作

    网上拉取Docker模板,使用singlarities/hadoop镜像 [root@localhost /]# docker pull singularities/hadoop 查看: [root@ ...

  5. 简单数论总结1——gcd与lcm

    并不重要的前言 最近学习了一些数论知识,但是自己都不懂自己到底学了些什么qwq,在这里把知识一并总结起来. 也不是很难的gcd和lcm 显而易见的结论: 为什么呢? 根据唯一分解定理: a和b都可被分 ...

  6. Visual Studio 安装easyX且导入graphics库后,outtextxy提示未定义标示符

    1.点击 “项目” ,然后点击 “属性”. 2. 然后点击左侧 “配置与属性” 下的 “常规” ,在点击 “字符集” ,选择 “使用多字节字符集” 即可解决问题

  7. Collection与Collections的区别

    Collection是集合类的上级接口,继承与他有关的接口主要有List和Set Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索.排序.线程安全等操作 稍微举 ...

  8. spring注解预览

    从Java5.0开始,Java开始支持注解.Spring做为Java生态中的领军框架,从2.5版本后也开始支持注解.相比起之前使用xml来配置Spring框架,使用注解提供了更多的控制Spring框架 ...

  9. 2、My Scripts

    http://www.cnblogs.com/image-eye/archive/2011/10/26/2220405.html      注释详解 1.打印选择菜单,按照选择项一键安装不同的web服 ...

  10. android获取屏幕宽度和高度

    1. WindowManager wm = (WindowManager) getContext() .getSystemService(Context.WINDOW_SERVICE); int wi ...