Django电商平台

Django电商平台

数据库设计

  • 用户数据库模型设计
class UserProfile(AbstractUser):
    # 继承Django原先的用户基类
    '''
        Username and password are required. Other fields are optional.
    '''
    gender_choice = [
        ('male', '男'),
        ('female', '女'),
	]
    username = models.CharField('用户名', max_length=30, unique=True)
    mobile = models.CharField('电话', max_length=20, null=False, blank=False)
    email = models.EmailField('邮箱', null=True, blank=True)
    gender = models.CharField('性别', null=False, choices=gender_choice)

    def __str__(self):
        return self.username

    class Meta:
        db_table = 'user'
        verbose_name = '用户信息'
        verbose_name_plural = verbose_name
mobile = models.CharField('电话', max_length=20, null=False, blank=False)
1.null 是针对数据库而言的,False表示不能为空
2.blank 是针对表单而言,False 表示表单的该字段不能为空

gender = models.CharField('性别', null=False, choices=gender_choice)
	如果提供了选择,则模型验证将强制执行这些选择,默认表单窗口小部件将是带有这些选择的选择框,而不是标准文本字段。
	每个元组中的第一个元素是要在模型上设置的实际值,第二个元素是人类可读的名称。
  • 安装第三方插件
# xadmin
$ pip install https://codeload.github.com/sshwsfc/xadmin/zip/django2
# ckeditor
$ pip install django-ckeditor
  • 将第三方插件要注册到应用中去

  • 商品的数据库模型

class Category(models.Model):
    # 类别的多种级别
    types = [
        (1, '一级类别'),
        (2, '二级类别'),
        (3, '三级列别')
    ]
   # …………
    category_type = models.IntegerField('类别级别', choices=types)
    # 类别的多级分类
    # 一级类别:二级类别 1:n
        parent_category = models.ForeignKey('self', verbose_name='父级分类'
           , related_name='sub_category', on_delete=models.CASCADE,null=True, blank=True)
    # 是否添加导航
    is_tab = models.BooleanField('是否导航', default=False)
    add_time = models.DateTimeField('添加时间', default=datetime.now)
parent_category = models.ForeignKey('self', verbose_name='父级分类'
           , related_name='sub_category', on_delete=models.CASCADE,null=True, blank=True)
# 父级分类和子分类 为 1:n关系

on_delete参数:
    To create a recursive relationship – an object that has a many-to-one relationship with itself – use models.ForeignKey('self', on_delete=models.CASCADE).
    级联删除。 Django会在DELETE CASCADE上模拟SQL约束的行为,并删除包含ForeignKey的对象。
  • 后台站点显示
class GoodsAdmin(object):
    # …………
    # 在添加商品的时候可以添加商品图片
    class GoodsImagesInline(object):
        model = GoodsImage
        # 不显示的字段名称
        exclude = ["add_time"]
        # 控制初始表单数量,默认为3
        extra = 3
        style = 'tab'
	# 内部嵌套
    inlines = [GoodsImagesInline]

  • 进行数据填充
# 加载Django配置和Django APP的注册。
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "shopAPI.settings")
django.setup()

# 然后导入数据,引入之前定义的数据库模型,将数据进行填充

注意要在加载Django配置之后在导入数据库模型

  • 配置多媒体文件存储路径
# settings.py

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

  • 配置多媒体路由
# urls.py
urlpatterns = [
    # …………
    # 配置静态文件的路由
    path('media/<path:path>', serve, {
   'document_root': MEDIA_ROOT})
]

视图函数

  • 视图函数的两种形式

    • FBV 视图函数接受request请求,函数体中直接是视图函数

    • CBV 该方法的视图继承了视图类views,然后类中可以定义各种http请求方式,

      不同的请求方式可以对应不同的视图函数,即将对图函数和HTTP请求方式绑定,

      编写路由的时候可以使用as_views()来使类生成视图函数

    FBV适合小型项目,综合、大型项目可以使用CBV

  • Django API

    • Django中可以通过原生的数据用json封装在返回response,但是图片、时间等字段不同正确转成json类型
    • Django中提供的序列化类,可以实现弥补上述缺点,但是图片的存储为相对路径,不能将静态资源的绝对路径自动补全,例如MEDIA_ROOT、MEDIA_URL无法自动添加
    • 使用DRF(Django Rest Framework)
  • 什么是序列化?

    序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程,例如json或者xml格式

  • 序列化的作用

    • 可以将查询集或者模型实例对象进行序列化为json或者xml格式,然后传输给用户
    • 可以对post或者patch/put请求进行数据处理,并进行验证。
  • 安装Django Rest Frameword的依赖包

$ pip install djangorestframework
# 自动生成API文档
$ pip install coreapi
# 文档的markdown展示
$ pip install markdown
# django-guardian是为Django提供额外的基于对象权限的身份验证后端
$ pip install django-guardian
# 过滤支持
$ pip install django-filter


# 最后在setting.py中添加第三方插件
  • 视图函数的编写流程
1.编写序列化类,规定需要进行序列化传输的数据
2.编写视图类,其中使用序列化
3.配置路由
# app/goods/serializers.py
from rest_framework import serializers
# 编写序列化类,其中的字段需要和数据库模型中的字段名对应
class GoodsSerializers(serializers.Serializer):
    name = serializers.CharField(required=True, max_length=20)
    shop_price = serializers.FloatField(default=
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值