
本文共 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 的电子商务项目。继续按照文档中的其他步骤进行扩展和优化,将你的项目变成一个功能完善的在线商店。
发表评论
最新留言
关于作者
