django项目搭建及遇到的问题

模型开始搭建

创建apps

开始创建应用的时候:python manage.py start user(cart,goods,order)

然后在dailyfresh:下面新建一个python包apps,主要用来存放上面创建的所有应用,

Settings.py

因为创建了这个就需要注册他们,为了省些代码,就将apps列入绝对地址:

sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))#apps添加为绝对路径

 然后就是注册应用的时候:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'tinymce',
    'user',
    'goods',
    'cart',
    'order',
]

 

接下来就是配置数据库,static,templates,等:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'dailyfresh',
        'USER':'root',
        'PASSWORD':'mysql',
        'HOST':'localhost',
        'PORT':3306,
    }
}
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,'templates')],
        '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',
            ],
        },
    },
]
STATIC_URL = '/static/'
STATICFILES_DIRS=[os.path.join(BASE_DIR,'static')]

然后就是因为我们要自己创建后台用户管理系统,就要背弃以前的后台用户管理,重写user后台就需要在models.py里面用from Django.contrib.auth.models import ABstractBaseUser来继承和重写,所以就需要在settings.py里面配置:

#自己建的默认用户管理,代替以前Django默认的后台用户管理系统
AUTH_USER_MODEL='user.User'

最后就是富文本配置(主要就是应用注册,和富文本框设置,urls.py设置):

TINYMCE_DEFAULT_CONFIG={
    'theme':'advanced',
    'width':600,
    'heigth':400,
}

到这里就结束了,所有的settings.py代码如下:

"""
Django settings for dailyfresh project.

Generated by 'django-admin startproject' using Django 2.2.8.

For more information on this file, see
https://docs.djangoproject.com/en/2.2/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/2.2/ref/settings/
"""

import os
import sys
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))#apps添加为绝对路径
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'xu#u-f+yt(3sn@bafg=xx2h_z*d44=p8go+ux%my-twk4)-&-('

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = []


# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'tinymce',
    'user',
    'goods',
    'cart',
    'order',
]

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 = 'dailyfresh.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,'templates')],
        '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 = 'dailyfresh.wsgi.application'


# Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases

#自己建的默认用户管理,代替以前Django默认的后台用户管理系统
AUTH_USER_MODEL='user.User'

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'dailyfresh',
        'USER':'root',
        'PASSWORD':'mysql',
        'HOST':'localhost',
        'PORT':3306,
    }
}


# Password validation
# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators

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',
    },
]


# Internationalization
# https://docs.djangoproject.com/en/2.2/topics/i18n/

LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_L10N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/

STATIC_URL = '/static/'
STATICFILES_DIRS=[os.path.join(BASE_DIR,'static')]

TINYMCE_DEFAULT_CONFIG={
    'theme':'advanced',
    'width':600,
    'heigth':400,
}

Dailyfresh.urls.py

from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('tinymce/',include('tinymce.urls')),
    path('user/',include(('user.urls','user'),namespace='user')),#用户管理
    path('cart/',include(('cart.urls','cart'),namespace='cart')),#购物车
    path('order/',include(('order.urls','order'),namespace='order')),#订单
    path('',include(('goods.urls','goods'),namespace='goods')),#商品模块

]

Models.py

User.models.py

from django.db import models
from django.contrib.auth.models import AbstractBaseUser#说明是一个抽象模型类
from db.base_model import BaseModel
# Create your models here.

class User(AbstractBaseUser,BaseModel):
    '''用户模型类'''
    #identifier必须有,不然后报错abstractbaseuser主要是用来重写django默认的后台user
    identifier = models.CharField(max_length=40, unique=True)
    USERNAME_FIELD = 'identifier'
    class Meta:
        db_table='df_user'
        verbose_name='用户'#这个生成的是“用户s”
        verbose_name_plural=verbose_name#这个可以将后面s去掉


class Address(BaseModel):
    '''用户地址模型类  一个用户可以对应多个收件地址,所以建立用户和地址一对多关系'''
    user=models.ForeignKey('User',verbose_name='所属账户',on_delete=models.CASCADE)
    receiver=models.CharField(max_length=20,verbose_name='收件人')
    addr=models.CharField(max_length=256,verbose_name='收件地址')
    zip_code=models.CharField(max_length=6,null=True,verbose_name='邮政编码')
    phone=models.CharField(max_length=11,verbose_name='收件人电话')
    is_default=models.BooleanField(default=False,verbose_name='是否默认')

    class Meta:
        db_table='df_address'
        verbose_name='地址'
        verbose_name_plural=verbose_name

cart.models.py

from django.db import models

# Create your models here.

Order.models.py

from django.db import models
from db.base_model import BaseModel
# Create your models here.

class OrderInfo(BaseModel):
    '''订单模型类'''
    PAY_METHOD_CHOICES=(
        (1,'货到付款'),
        (2,'微信支付'),
        (3,'支付宝'),
        (4,'银联支付'),
    )

    ORDER_STATUS_CHOICES=(
        (1,'待支付'),
        (2,'待发货'),
        (3,'待收货'),
        (4,'待评价'),
        (5,'已完成'),
    )

    order_id=models.CharField(max_length=128,primary_key=True,verbose_name='订单id')
    user=models.ForeignKey('user.User',verbose_name='用户',on_delete=models.CASCADE)
    addr=models.ForeignKey('user.Address',verbose_name='地址',on_delete=models.CASCADE)
    pay_method=models.SmallIntegerField(choices=PAY_METHOD_CHOICES,default=3,verbose_name='支付方式')
    total_count=models.IntegerField(default=1,verbose_name='商品数量')
    total_price=models.DecimalField(max_digits=10,decimal_places=2,verbose_name='商品总价')
    transit_price=models.DecimalField(max_digits=10,decimal_places=2,verbose_name='订单运费')
    order_status=models.SmallIntegerField(choices=ORDER_STATUS_CHOICES,default=1,verbose_name='支付状态')
    trade_no=models.CharField(max_length=128,verbose_name='支付编号')

    class Meta:
        db_table='df_order_info'
        verbose_name='订单'
        verbose_name_plural=verbose_name



class OrderGoods(BaseModel):
    '''订单商品模型类   上面是所有订单,然后这个是每个订单对应的详细订单商品'''
    order=models.ForeignKey('OrderInfo',verbose_name='订单',on_delete=models.CASCADE)
    sku=models.ForeignKey('goods.GoodsSKU',verbose_name='商品sku',on_delete=models.CASCADE)
    count=models.IntegerField(default=1,verbose_name='商品数量')
    price=models.DecimalField(max_digits=10,decimal_places=2,verbose_name='商品价格')
    comment=models.CharField(max_length=256,verbose_name='评论')

    class Meta:
        db_table='df_order_goods'
        verbose_name='订单商品'
        verbose_name_plural=verbose_name

goods.models.py

from django.db import models
from tinymce.models import HTMLField
from db.base_model import BaseModel
# Create your models here.

class GoodsType(BaseModel):
    '''商品类型模型类'''
    name=models.CharField(max_length=20,verbose_name='种类名称')
    logo=models.CharField(max_length=20,verbose_name='标识')
    image=models.ImageField(upload_to='type',verbose_name='商品类型图片')

    class Meta:
        db_table='df_goods_type'
        verbose_name='商品类型'
        verbose_name_plural=verbose_name

    def __str__(self):
        return self.name

class GoodsSKU(BaseModel):
    '''商品SKU模型类'''
    status_choices = (
        (0, '下线'),
        (1, '上线'),
    )
    type = models.ForeignKey('GoodsType', verbose_name='商品种类',on_delete=models.CASCADE)
    goods = models.ForeignKey('Goods', verbose_name='商品SPU',on_delete=models.CASCADE)
    name = models.CharField(max_length=20, verbose_name='商品名称')
    desc = models.CharField(max_length=256, verbose_name='商品简介')
    price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='商品价格')
    unite = models.CharField(max_length=20, verbose_name='商品单位')
    image = models.ImageField(upload_to='goods', verbose_name='商品图片')
    stock = models.IntegerField(default=1, verbose_name='商品库存')
    sales = models.IntegerField(default=0, verbose_name='商品销量')
    status = models.SmallIntegerField(default=1, choices=status_choices, verbose_name='商品状态')

    class Meta:
        db_table = 'df_goods_sku'
        verbose_name = '商品'
        verbose_name_plural = verbose_name

class Goods(BaseModel):
    '''商品spu模型类 商品spu对sku是一对多关系'''
    name=models.CharField(max_length=20,verbose_name='商品spu名称')
    detail=HTMLField(blank=True,verbose_name='商品详情')

    class Meta:
        db_table='df_goods'
        verbose_name='商品spu'
        verbose_name_plural=verbose_name



class GoodsImage(BaseModel):
    '''商品图片模型类'''
    sku = models.ForeignKey('GoodsSKU', verbose_name='商品',on_delete=models.CASCADE)
    image = models.ImageField(upload_to='goods', verbose_name='图片路径')

    class Meta:
        db_table = 'df_goods_image'
        verbose_name = '商品图片'
        verbose_name_plural = verbose_name


class IndexGoodsBanner(BaseModel):
    '''首页轮播商品展示模型类'''
    sku = models.ForeignKey('GoodsSKU', verbose_name='商品',on_delete=models.CASCADE)
    image = models.ImageField(upload_to='banner', verbose_name='图片')
    index = models.SmallIntegerField(default=0, verbose_name='展示顺序')

    class Meta:
        db_table = 'df_index_banner'
        verbose_name = '首页轮播商品'
        verbose_name_plural = verbose_name


class IndexTypeGoodsBanner(BaseModel):
    '''首页分类商品展示模型类'''
    DISPLAY_TYPE_CHOICES = (
        (0, "标题"),
        (1, "图片")
    )

    type = models.ForeignKey('GoodsType', verbose_name='商品类型',on_delete=models.CASCADE)
    sku = models.ForeignKey('GoodsSKU', verbose_name='商品SKU',on_delete=models.CASCADE)
    display_type = models.SmallIntegerField(default=1, choices=DISPLAY_TYPE_CHOICES, verbose_name='展示类型')
    index = models.SmallIntegerField(default=0, verbose_name='展示顺序')

    class Meta:
        db_table = 'df_index_type_goods'
        verbose_name = "主页分类展示商品"
        verbose_name_plural = verbose_name



class IndexPromotionBanner(BaseModel):
    '''首页促销活动模型类'''
    name = models.CharField(max_length=20, verbose_name='活动名称')
    url = models.URLField(verbose_name='活动链接')
    image = models.ImageField(upload_to='banner', verbose_name='活动图片')
    index = models.SmallIntegerField(default=0, verbose_name='展示顺序')

    class Meta:
        db_table = 'df_index_promotion'
        verbose_name = "主页促销活动"
        verbose_name_plural = verbose_name

迁移数据库文件的时候遇到的问题

1.下面这个主要就是dailyfresh.urls.py这个里面报的错,namespace在include里面的位置,改了,版本不一样,

 

改了以后应该这样写:

url(r'^users/', include(('users.urls', 'users'), namespace='users')),

 

2.这个错误是因为重写和继承django默认的后台管理user是报的错,ABstractBaseUser里面缺少一些代码:

   identifier = models.CharField(max_length=40, unique=True)

USERNAME_FIELD = 'identifier'

 

 

数据库展示

 

 

最后到此就结束了,主要就是一些项目开始搭建的模型一些细节或者注意的问题,希望能帮助到大家,可以的话,希望涨涨人气,这也是2019年最后的挣扎把,快步入2020年了,该换个样子前进了,加油!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
搭建 Python、PyCharm 和 Django Web 项目的步骤如下: 1.首先,你需要在你的计算机上安装 Python。你可以从官方网站(https://www.python.org/downloads/)上下载 Python 安装包,并按照提示进行安装。安装完成后,你可以在命令行中输入“python”来测试 Python 是否已经成功安装。 2.接着,你需要安装 PyCharm。PyCharm 是一款 Python 集成开发环境,可以帮助你更加高效地编写 Python 代码。你可以从官方网站(https://www.jetbrains.com/pycharm/download/)上下载 PyCharm 安装包,并按照提示进行安装。安装完成后,你可以打开 PyCharm 来创建 Python 项目。 3.创建 Django 项目。在 PyCharm 中创建一个新的 Django 项目非常简单。首先,你需要创建一个新的 PyCharm 项目,然后在项目的根目录中打开命令行终端。接着,你可以使用以下命令来安装 Django: ``` pip install Django ``` 安装完成后,你可以使用以下命令来创建一个新的 Django 项目: ``` django-admin startproject projectname ``` 这里的 “projectname” 是你的项目名称,你可以自己定义。执行完这个命令后,Django 会在当前目录下创建一个新的项目目录,其中包含一个名为 “manage.py” 的文件和一个名为 “projectname” 的子目录。 4.运行 Django 项目。你可以使用以下命令来启动 Django 项目: ``` python manage.py runserver ``` 这个命令会启动一个本地的 Web 服务器,并在浏览器中打开一个新的网页。你可以在这个网页上查看你的 Django 项目。 以上就是搭建 Python、PyCharm 和 Django Web 项目的基本步骤。如果你遇到了任何问题,请随时与我联系。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值