DRF项目(一)创建rest下面,并且进行配置,建模,往数据库添加数据
发布日期:2021-05-24 10:59:02 浏览次数:22 分类:精选文章

本文共 7640 字,大约阅读时间需要 25 分钟。

项目创建与配置指南

创建一个功能完善的 Django 项目是开发者的基础任务之一。本文将详细说明如何在 PyCharm 中创建并配置一个基于 Django 之 reelsREST 框架的电子商务项目。我们将包括项目创建、数据库配置、模型建模、后台管理配置及其他相关步骤。

1. 结构化项目创建

在 PyCharm 中创建新项目:

1.文件 > 项目 + 按键设置2.输入项目名称,例如“eshop”3.选择 Python 版本和项目模板4. quotai rocket overlaps i

2. 设置和数据库配置

进入项目目录下的 settings.py 文件,添加如下配置:

from pathlib import PathBASE_DIR = Path(__file__).resolve().parent.parentSECRET_KEY = 'django-insecure-your-secret-key-here'DEBUG = TrueALLOWED_HOSTS = ['*']INSTALLED_APPS = [    'eshop.apps.EshopConfig',    'rest_framework',    'rest_framework.authtoken',    'django.contrib.admin',    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.messages',    'django.contrib.staticfiles',]MIDDLEWARE = [    'django.middleware.security.SecurityMiddleware',    'django.contrib.sessions.middleware.SessionMiddleware',    'django.middleware.common.CommonMiddleware',    'django.middleware.csrf.CsrfViewMiddleware',    'django.contrib.auth.middleware.AuthenticationMiddleware',    'django.contrib.messages.middleware.MessageMiddleware',    'django.middleware.clickjacking.XFrameOptionsMiddleware',]ROOT_URLCONF = 'eshop.urls'TEMPLATES = [    {        'BACKEND': 'django.template.backends.django.DjangoTemplates',        'DIRS': [],        'APP_DIRS': True,        'OPTIONS': {            'context_processors': [                'django.template.context_processors.debug',                'django.template.context_processors.request',                'django.contrib.auth.context_processors.auth',                'django.contrib.messages.context_processors.messages',            ],        },    },]WSGI_APPLICATION = 'eshop.wsgi.application'DATABASES = {    'default': {        'ENGINE': 'django.db.backends.mysql',        'NAME': 'eshop',        'USER': 'root',        'PASSWORD': 'yourpassword',        'HOST': 'localhost',        'PORT': '3306',        'OPTIONS': {            'initiator.timezone': 'UTC',            'charset': 'utf8mb4',        },    },}AUTH_USER_MODEL = 'auth.User'AUTH_PASSWORD_VALIDATORS = [    {        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',    },    {        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',    },    {        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',    },    {        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',    },]LANGUAGE_CODE = 'en-us'TIME_ZONE = 'UTC'USE_I18N = TrueUSE_TZ = TrueSTATIC_URL = '/static/'DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'MEDIA_URL = '/media/'MEDIA_ROOT = os.path.join(BASE_DIR, 'eshop', 'media')REST_FRAMEWORK = {    'DEFAULT_DECIMAL_places': 2,    'DEFAULT_MAX_DIGITS': 20,}from drf.settings import DRF_SETTINGS

3. 解决跨域问题

在项目开发中,跨域问题是常见的。为了解决跨域问题,我们需要引入 CORS �enhaqi 包,并配置 middleware。

添加依赖项:

pip install corsheaderspython -m corsheaders configuration

在你的 URLs.py 文件中添加如下配置:

from django.urls import includefrom rest_frameworkernenka import include as rest routersfrom corsheaders import middlewareMIDDLEWARE += [    middleware.CorsMiddleware,]urlpatterns = [    path('api/', include(routers.urls)),]

4. 建模与数据迁移

模型是项目的灵魂。我们需要在项目中创建相应的实体类模型,并进行迁移到数据库。

进入 yourapp/models.py 文件,添加如下模型:

from django.db import modelsfrom django.contrib.auth import Userclass Product(models.Model):    model = models.CharField(max_length=200)    description = models.TextField()    price = models.DecimalField(max_digits=12, decimal_places=2)    sold = models.PositiveIntegerField(default=0)    category = models.ForeignKey('category', on_delete=models.CASCADE)    manufacturer = models.ForeignKey('manufacturer', on_delete=models.CASCADE)    created = models.DateTimeField(auto_now_add=True)    updated = models.DateTimeField(auto_now=True)    def __str__(self):        return self.modelclass 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.nameclass Manufacturer(models.Model):    name = models.CharField(max_length=200)    description = models.TextField()    logo = models.ImageField(upload_to='manufacturers/%Y/%m/%d/', null=True, blank=True)    created = models.DateTimeField(auto_now_add=True)    updated = models.DateTimeField(auto_now=True)    def __str__(self):        return self.nameclass UserProfile(models.Model):    user = models.OneToOneField(User, related_name='profile', on_delete=models.CASCADE)    mobile_phone = models.CharField(max_length=200)    nickname = models.CharField(max_length=200)    description = models.TextField(max_length=500)    icon = models.ImageField(upload_to='users/%Y/%m/%d/', null=True, blank=True)    gender = models.CharField(max_length=10)    birth_date = models.DateTimeField(null=True, blank=True)    created = models.DateTimeField(auto_now_add=True)    updated = models.DateTimeField(auto_now=True)    def __str__(self):        return self.user.usernameclass DeliveryAddress(models.Model):    user = models.ForeignKey(User, related_name='addresses', on_delete=models.CASCADE)    contact_person = models.CharField(max_length=200)    contact_phone = models.CharField(max_length=200)    address = models.TextField()    created = models.DateTimeField(auto_now_add=True)    updated = models.DateTimeField(auto_now=True)    def __str__(self):        return f"{self.user} {self.address}"class Order(models.Model):    user = models.ForeignKey(User, related_name='orders', on_delete=models.CASCADE)    status = models.CharField(max_length=2, choices=        ('new', 'not paid', 'paid', 'transport', 'closed'),        default='new'    )    product = models.ForeignKey(Product, on_delete=models.CASCADE)    quantity = models.PositiveIntegerField(default=1)    total = models.DecimalField(max_digits=12, decimal_places=2)    address = models.ForeignKey(DeliveryAddress, on_delete=models.CASCADE)    created = models.DateTimeField(auto_now_add=True)    updated = models.DateTimeField(auto_now=True)    def __str__(self):        return f"Order {self.id} for {self.user.username}"

运行以下命令来迁移数据库:

python manage.py makemigrationspython manage.py migrate

你的数据库应该会生成新的迁移文件,并应用到数据库上。再次打开 admin 后台,你应该可以看到你的模型正在 admin 中被注册。

5. 后台管理配置

进入你的 admin.py 文件,并注册你的模型:

from django.contrib import adminfrom yourapp.models import Product, Category, Manufacturer, UserProfile, DeliveryAddress, Orderadmin.site.register(Product)admin.site.register(Category)admin.site.register(Manufacturer)admin.site.register(UserProfile)admin.site.register(DeliveryAddress)admin.site.register(Order)

这个过程会注册每一个模型作为一个 admin 项,在后台允许你进行增删改查操作。

6. 打开后台管理界面

完成配置后,运行以下命令打开 admin 后台管理界面:

python manage.py admin

你将进入 Django admin 后台界面,能够查看和管理你的数据库中的数据。

7. 配置图片上传路径

确保 your.settings.py 包含 media 配置:

MEDIA_URL = 'media/'MEDIA_ROOT = os.path.join(BASE_DIR, 'eshop', 'media')from django.conf import settingsfrom django.static import filesfrom rest_framework.settings import DRF_SETTINGSfrom rest_framework.authtoken import authtokensettings.MEDIA_URL = '/media/'settings.MEDIA_ROOT = os.path.join(settings.BASE_DIR, settings.ESHOP, 'media')def cors_required(middleWare, view_func):    def wrapper(request, *args, **kwargs):        headers = request梅dxheaders.copy()        headers['X-Cors-Source-Control'] = 'allow-origin = *        return view_func(request, *args, **kwargs)    return wrapperMIDDLEWARE = (    cors_required,    'django.middleware.common.CommonMiddleware',    ...)urlpatterns = [    path('api/', include('rest_framework.urls.as Router() ),]

以上配置将确保前端能够正确地访问上传的图片以及其他媒体文件。

通过以上步骤,你已经成功创建并配置了一个基于 Django 的电子商务项目。继续按照文档中的其他步骤进行扩展和优化,将你的项目变成一个功能完善的在线商店。

上一篇:django_rest 框架解决跨域问题
下一篇:DRF框架(十四)——过滤Filtering,排序

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年04月26日 00时40分14秒