目录
1 项目的创建
1 在pycharm创建django项目
什么也没有配置了,只是单纯的创建一个django项目
2 在setting里面配置数据库
在数据库里面要生成eshop,以后项目就可以连接到eshop这个数据库了
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里面进行建模
写好代码之后要进行迁移到数据库
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里面添加数据了
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后台
就可以在这个里面进行增删改查了
配置上传图片的路径
第一步
MEDIA_URL='/media/'
MEDIA_ROOT=os.path.join(os.path.dirname(BASE_DIR),'eshop/media')
第二部:
# 以下代码 就是前端就可以使用上传的数据,比如图片
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)