DRF项目(一)创建rest下面,并且进行配置,建模,往数据库添加数据

2021-03-02 14:44:29 浏览数 (1)

目录

  • 1 项目的创建
    • 1 在pycharm创建django项目
    • 下面开始配置项目
      • 1 因为我们要用rest框架,所以在setting里面要配置rest框架的东西,具体如下:
      • 2 解决跨域问题看之前的文章,点击下面的链接就可以看
  • 2 建模,在model里面创建实体类模型
  • 3 admin.py里面进行注册
  • 4 打开admin后台
  • 配置上传图片的路径

1 项目的创建

1 在pycharm创建django项目

什么也没有配置了,只是单纯的创建一个django项目

2 在setting里面配置数据库

在数据库里面要生成eshop,以后项目就可以连接到eshop这个数据库了

代码语言:javascript复制
DATABASES = {
    'default':{
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'eshop',
        'USER':'root',
        'PASSWORD':'123456',
        'HOST':'localhost',
        'PORT':'3306',
    }
}

出现以下的界面,说明项目创建成功

下面开始配置项目

1 因为我们要用rest框架,所以在setting里面要配置rest框架的东西,具体如下:

2 解决跨域问题看之前的文章,点击下面的链接就可以看

django_rest 框架解决跨域问题

本项目里面我们要做的是:

第一步:加跨域的包

第二部:

第三步:

2 建模,在model里面创建实体类模型

设置好配置之后,首先需要进行建模,在model.py里面进行建模

写好代码之后要进行迁移到数据库

代码语言:javascript复制
from django.db import models
# 这个就是导入一个装饰器,在每一个类上面写这个装饰器,将代码拿到python2下也是可以使用的。就是有这个作用
from django.utils.six import python_2_unicode_compatible
from django.conf import settings


@python_2_unicode_compatible
class Category(models.Model):
    """
    商品类别:笔记本、平板电脑、一体机、台式机、服务器
    """
    name = models.CharField(max_length=200)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    def __str__(self):
        return self.name



@python_2_unicode_compatible
class Manufacturer(models.Model):
    """
    生产厂商
    """
    name = models.CharField(max_length=200)
    description = models.TextField()
    logo = models.ImageField(blank=True, null=True, max_length=200, upload_to='manufacturer/uploads/%Y/%m/%d/')
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    def __str__(self):
        return self.name



@python_2_unicode_compatible
class Product(models.Model):
    """
    产品
    """
    model = models.CharField(max_length=200)
    description = models.TextField()
    image = models.ImageField(max_length=200, upload_to='product/uploads/%Y/%m/%d/')
DecimalField是新出的字段,带小数点的,max_digits是最多有几位数字,decimal_places是小数点多少位
    price = models.DecimalField(max_digits=12, decimal_places=2)
PositiveIntegerField是正整数字段
    sold = models.PositiveIntegerField(default=0)
    category = models.ForeignKey(Category, related_name='product_in', on_delete=models.CASCADE)
    manufacturer = models.ForeignKey(Manufacturer, related_name='product_of', on_delete=models.CASCADE)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    def __str__(self):
        return self.model



@python_2_unicode_compatible
class DeliveryAddress(models.Model):
    """
    收货地址
    """
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='delivery_address_of',)
    contact_person = models.CharField(max_length=200)
    contact_mobile_phone = models.CharField(max_length=200)
    delivery_address = models.TextField()
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    def __str__(self):
        return self.delivery_address


@python_2_unicode_compatible
class UserProfile(models.Model):
    """
    用户档案
    """
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='profile_of',)
    mobile_phone = models.CharField(blank=True, null=True, max_length=200)
    nickname = models.CharField(blank=True, null=True, max_length=200)
    description = models.TextField(blank=True, null=True)
    icon = models.ImageField(blank=True, null=True, max_length=200, upload_to='user/uploads/%Y/%m/%d/')
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    delivery_address = models.ForeignKey(DeliveryAddress, related_name='user_delivery_address', on_delete=models.CASCADE, blank=True, null=True,)




@python_2_unicode_compatible
class Order(models.Model):
    """
    Order   订单
    """
状态选择
    STATUS_CHOICES = (
        ('0', 'new'),  新订单
        ('1', 'not paid'), 没有支付订单
        ('2', 'paid'),  支付订单
        ('3', 'transport'),已经配送途中了
        ('4', 'closed'), 订单关闭了
    )
    status = models.CharField(choices=STATUS_CHOICES, default='0', max_length=2)
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='order_of',)
   订单的备注 
remark = models.TextField(blank=True, null=True)
    product = models.ForeignKey(Product, related_name='order_product', on_delete=models.CASCADE)
    price = models.DecimalField(max_digits=12, decimal_places=2)
    quantity = models.PositiveIntegerField(default=1)
    address = models.ForeignKey(DeliveryAddress, related_name='order_address', on_delete=models.CASCADE)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    def __str__(self):
        return 'order of %d' % (self.user.id)

3 admin.py里面进行注册

我们要实现在数据库添加数据,第一可以直接打开数据库进行添加,第二是可以将数据库字段注册到admin里面, 在admin里面进行添加。所以我们要在admin.py里面进行注册

之后我们就可以在admin里面添加数据了

代码语言:javascript复制
from django.contrib import admin

# Register your models here.


from computerapp.models import Product, Category, Manufacturer, UserProfile, DeliveryAddress, Order

from django.contrib.auth.models import User



class UserProfileAdmin(admin.ModelAdmin):
    list_display = ['id', 'mobile_phone', 'nickname', 'user',]

admin.site.register(UserProfile, UserProfileAdmin)




class CategoryAdmin(admin.ModelAdmin):
    list_display = ['id', 'name',]

admin.site.register(Category, CategoryAdmin)


class ManufacturerAdmin(admin.ModelAdmin):
    list_display = ['id', 'name',]

admin.site.register(Manufacturer, ManufacturerAdmin)



class ProductAdmin(admin.ModelAdmin):
    list_display = ['id', 'model', 'price', 'category', 'manufacturer', 'sold',]
    list_editable = ['price', 'sold', 'category',]

admin.site.register(Product, ProductAdmin)




class DeliveryAddressAdmin(admin.ModelAdmin):
    list_display = ['id', 'user', 'contact_person', 'contact_mobile_phone', 'delivery_address',]

admin.site.register(DeliveryAddress, DeliveryAddressAdmin)




class OrderAdmin(admin.ModelAdmin):
    list_display = ['id', 'status', 'user',]

admin.site.register(Order, OrderAdmin)

4 打开admin后台

就可以在这个里面进行增删改查了

配置上传图片的路径

第一步

代码语言:javascript复制
MEDIA_URL='/media/'
MEDIA_ROOT=os.path.join(os.path.dirname(BASE_DIR),'eshop/media')

第二部:

代码语言:javascript复制
# 以下代码  就是前端就可以使用上传的数据,比如图片
if settings.DEBUG:
    urlpatterns  = static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

0 人点赞