前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DRF项目(一)创建rest下面,并且进行配置,建模,往数据库添加数据

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

作者头像
一写代码就开心
发布2021-03-02 14:44:29
7020
发布2021-03-02 14:44:29
举报
文章被收录于专栏:java和python

目录

  • 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)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/02/11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 1 项目的创建
    • 1 在pycharm创建django项目
      • 下面开始配置项目
        • 1 因为我们要用rest框架,所以在setting里面要配置rest框架的东西,具体如下:
        • 2 解决跨域问题看之前的文章,点击下面的链接就可以看
    • 2 建模,在model里面创建实体类模型
    • 3 admin.py里面进行注册
    • 4 打开admin后台
    • 配置上传图片的路径
    相关产品与服务
    数据库
    云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档