天天生鲜Django(1)


***************************************************************************************************

***********     * 一.项目框架搭建*************

***************************************************************************************************

1.安装虚拟环境,pip install virtualenv                pip install virtualenvwrapper-win

  查看版本号:virtualenv -version

2.创建python3版本的虚拟环境    mkvirtualenv -p "E:\install\python\python3\python3.exe" pyp

      在ubuntu中创建不用这么麻烦,直接  mkvirtualenv -p python3 pyp

      查看该环境下安装了哪些包:pip list        pip freeze

3.进入虚拟环境:先workon查看有哪些虚拟环境,进入虚拟环境workon pyp

4.安装Django:pip install Django==1.8.2

5.创建项目:django-admin startproject test1

          cd test1

6.创建运用:python manage.py startapp book

7.打开pycharm,指定项目的运行环境,在c盘下的envs/环境名/scripts/python.exe,然后将运用注册到setting中去


================================================

要安装pip install pymysql

pip install Django-tinymce==2.6.0

pip install Pillow

一.项目多的时候,要创建一个apps来进行统一管理:

注册这些应用有两种写法

1.在settings的INSTALLED_APPS中注册这些应用'apps.user'等。

2.让项目可以自动识别:

(1)settings中加入import sys       

sys.path.insert(0,os.path.join(BASE_DIR,"apps"))#让项目可以识别app目录,sys.path用于动态的去修改路径

(2)点击apps,打开Mark Directory as点击Sources Root,然后在settings的INSTALLED_APPS中注册这些应用'user'等

二.配置模板目录:在settings的TEMPLATES中写'DIRS': [os.path.join(BASE_DIR,"templates")],

================================================================

mysql数据库的配置,在setting里面

DATABASES = {

    'default': {

        'ENGINE': 'django.db.backends.mysql',

        'NAME': "dailyfresh1807",

        'USER': "root",

        'PASSWORD': "root",

        'HOST': "127.0.0.1",

        'PORT': "3306",

    }

}

============================================

后台的相关配置,让后台语言为中文简体

LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'Asia/Shanghai'

============================================

配置静态文件目录

STATIC_URL = '/static/'  #配置项目中静态文件访问的路径

STATICFILES_DIRS = [os.path.join(BASE_DIR,"static")]    #配置项目文件中的静态文件的存储位置

============================================

项目中引入应用的urls.py文件,尽量的使用反向解析,帮助我们动态的生成路径,此为一级路由

from django.conf.urls import include, url

from django.contrib import admin

urlpatterns = [

    url(r'^admin/', include(admin.site.urls)),

    url(r'^tinymce/', include("tinymce.urls")),                #富文本编辑器

    url(r'^user/', include("user.urls",namespace="user")),      #用户模块

    url(r'^cart/', include("cart.urls",namespace="cart")),      #购物车模块

    url(r'^order/', include("order.urls",namespace="order")),  #订单模块

    url(r'', include("goods.urls",namespace="goods")),          #商品模块

]

在创建的各个运用里都加入urls.py文件

=======================================================

富文本插件

1.注册:settings的INSTALLED_APPS中写入tinymce,

2.在setting配置:

TINYMCE_DEFAULT_CONFIG = {

    'theme':'advanced',

    'width': 600,

    'height': 400

}

3.在一级的urls的admin配置的路由下写入

from django.conf.urls import include, url

from user import views

from user.views import RegisterView,ActiveView,LoginView

url(r'^tinymce/', include("tinymce.urls")),    #富文本编辑器

***************************************************************************************************

************************ *二.创建模型类*  ********************

***************************************************************************************************

SPU商品信息集合的最小单位,属性特性相同的商品就一个SPU

SKU库存进出计量的最小单位,件/盒/托盘等

1.基本模型类

在总项目下新建db/base_model.py

from django.db import models

class BaseModel(models.Model):

    create_time = models.DateField(auto_now_add=True,verbose_name="创建时间")

    update_time = models.DateField(auto_now_add=True,verbose_name="更新时间")

    is_delete= models.BooleanField(default=False,verbose_name="删除标记")

    class Meta:

        #抽象的模型类,最后不会生成表

        abstract = True

==================================================

2.用户模型类

在user/models.py中

from django.db import models

from django.contrib.auth.models import AbstractUser

from db.base_model import BaseModel

# Create your models here.

class User(AbstractUser,BaseModel):

    class Meta:

        db_table = "df_user"

        verbose_name = "用户"

        verbose_name_plural = verbose_name

class Address(BaseModel):

    user = models.ForeignKey("User",verbose_name="所属账户")

    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_defult = models.BooleanField(default=False,verbose_name="是否默认")

    class Meta:

        db_table = 'df_address'

        verbose_name ="地址"

        verbose_name_plural = verbose_name

====================================================

3.商品模块的模型类

from django.db import models

from db.base_model import BaseModel

from tinymce.models import HTMLField

# 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="商品类型图片")

    cover_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 Goods(BaseModel):

    name = models.CharField(max_length=20,verbose_name="商品spu名称")

    detail = HTMLField(blank=True,verbose_name="商品详情")

    def __str__(self):

        return self.name

    class Meta:

        db_table = "df_goods"

        verbose_name = "商品SPU"

        verbose_name_plural = verbose_name

class GoodsImage(BaseModel):

    sku = models.ForeignKey("GoodsSKU",verbose_name="商品")

    image = models.ImageField(upload_to="goods",verbose_name="图片路径")

    class Meta:

        db_table = "df_goods_image"

        verbose_name = "商品图片"

        verbose_name_plural = verbose_name

class GoodsSKU(BaseModel):

    status_choices = (

        (0,"上线"),

        (1,"下线"),

    )

    type = models.ForeignKey("GoodsType",verbose_name="商品种类")

    goods = models.ForeignKey("Goods",verbose_name="商品SPU")

    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="商品状态")

    def __str__(self):

        return self.name

    class Meta:

        db_table = "df_goods_sku"

        verbose_name ="商品"

        verbose_name_plural = verbose_name

class IndexGoodsBanner(BaseModel):

    sku = models.ForeignKey("GoodsSKU",verbose_name="商品")

    image = models.ImageField(upload_to="banner",verbose_name="图片")

    index = models.SmallIntegerField(default=0,verbose_name="展示顺序")

    def __str__(self):

        return self.sku.name

    class Meta:

        db_table = "df_index_banner"

        verbose_name="首页轮播图片"

        verbose_name_plural = verbose_name

class IndexTypeGoodBanner(BaseModel):

    DISPLAY_TYPE_CHOICES = (

        (0,"标题"),

        (1,"图片"),

    )

    type = models.ForeignKey("GoodsType",verbose_name="商品类型")

    sku = models.ForeignKey("GoodsSKU",verbose_name="商品SKU")

    display_type = models.SmallIntegerField(default=1,choices=DISPLAY_TYPE_CHOICES,verbose_name="商品显示类型")

    index = models.SmallIntegerField(default=0,verbose_name="商品顺序")

    def __str__(self):

        return self.type.name +"===" +self.sku.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="活动链接")

    url = models.CharField(max_length=256,verbose_name="活动链接")

    image = models.ImageField(upload_to="banner",verbose_name="活动图片")

    index = models.SmallIntegerField(default=0,verbose_name="展示顺序")

    def __str__(self):

        return self.name

    class Meta:

        db_table = "df_index_promotion"

        verbose_name = "主页促销活动"

        verbose_name_plural = verbose_name

========================================================

4.订单模型类:

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=126,primary_key=True,verbose_name="订单ID")

    user = models.ForeignKey("user.User",verbose_name="用户")

    addr = models.ForeignKey("user.Address",verbose_name="地址")

    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="订单")

    sku = models.ForeignKey("goods.GoodsSKU", verbose_name="商品SKU")

    count = models.IntegerField(default=1, verbose_name="商品数目")

    price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="商品价格")

    comment = models.CharField(max_length=256,default='',verbose_name='评论')

    class Meta:

        db_table = 'df_order_goods'

        verbose_name='订单商品'

        verbose_name_plural = verbose_name

========================================================

5.替换Django默认的认证系统

在setting中加入

#django认证的系统使用的模型类

AUTH_USER_MODEL = "user.User"

==========================================================

6.在总项目的__init__文件下写入

import pymysql

pymysql.install_as_MySQLdb()

==========================================================

7.进行生成迁移文件和执行迁移文件(前提是在数据库中已经将dailyfresh1807数据库建立好了 create databases dailyfresh1807 charset = "utf8";)

python manage.py makemigration

python manage.py migrate

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容