目录
- 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)