***************************************************************************************************
***********? ? ?* 一.項目框架搭建*************
***************************************************************************************************
1.安裝虛擬環(huán)境,pip install virtualenv? ? ? ? ? ? ? ? pip install virtualenvwrapper-win
? 查看版本號:virtualenv -version
2.創(chuàng)建python3版本的虛擬環(huán)境? ? mkvirtualenv -p "E:\install\python\python3\python3.exe" pyp
? ? ? 在ubuntu中創(chuàng)建不用這么麻煩击敌,直接? mkvirtualenv -p python3 pyp
? ? ? 查看該環(huán)境下安裝了哪些包:pip list? ? ? ? pip freeze
3.進入虛擬環(huán)境:先workon查看有哪些虛擬環(huán)境笙以,進入虛擬環(huán)境workon pyp
4.安裝Django:pip install Django==1.8.2
5.創(chuàng)建項目:django-admin startproject test1
? ? ? ? ? cd test1
6.創(chuàng)建運用:python manage.py startapp book
7.打開pycharm,指定項目的運行環(huán)境募逞,在c盤下的envs/環(huán)境名/scripts/python.exe,然后將運用注冊到setting中去
================================================
要安裝pip install pymysql
pip install Django-tinymce==2.6.0
pip install Pillow
一.項目多的時候,要創(chuàng)建一個apps來進行統(tǒng)一管理:
注冊這些應用有兩種寫法
1.在settings的INSTALLED_APPS中注冊這些應用'apps.user'等馋评。
2.讓項目可以自動識別:
(1)settings中加入import sys? ? ? ?
sys.path.insert(0,os.path.join(BASE_DIR,"apps"))#讓項目可以識別app目錄,sys.path用于動態(tài)的去修改路徑
(2)點擊apps放接,打開Mark Directory as點擊Sources Root,然后在settings的INSTALLED_APPS中注冊這些應用'user'等
二.配置模板目錄:在settings的TEMPLATES中寫'DIRS': [os.path.join(BASE_DIR,"templates")],
================================================================
mysql數(shù)據(jù)庫的配置留特,在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'
============================================
配置靜態(tài)文件目錄
STATIC_URL = '/static/'? #配置項目中靜態(tài)文件訪問的路徑
STATICFILES_DIRS = [os.path.join(BASE_DIR,"static")]? ? #配置項目文件中的靜態(tài)文件的存儲位置
============================================
項目中引入應用的urls.py文件,盡量的使用反向解析,幫助我們動態(tài)的生成路徑蜕青,此為一級路由
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")),? ? ? ? ? #商品模塊
]
在創(chuàng)建的各個運用里都加入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")),? ? #富文本編輯器
***************************************************************************************************
************************ *二.創(chuàng)建模型類*? ********************
***************************************************************************************************
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="創(chuàng)建時間")
? ? 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="聯(lián)系電話")
? ? 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="商品狀態(tài)")
? ? 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,"銀聯(lián)支付")
? ? )
? ? ORDER_STATUS_CHOICES = (
? ? ? ? (1, "待支付"),
? ? ? ? (2, "待發(fā)貨"),
? ? ? ? (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="商品數(shù)量")
? ? 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="訂單狀態(tài)")
? ? 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="商品數(shù)目")
? ? 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默認的認證系統(tǒng)
在setting中加入
#django認證的系統(tǒng)使用的模型類
AUTH_USER_MODEL = "user.User"
==========================================================
6.在總項目的__init__文件下寫入
import pymysql
pymysql.install_as_MySQLdb()
==========================================================
7.進行生成遷移文件和執(zhí)行遷移文件(前提是在數(shù)據(jù)庫中已經將dailyfresh1807數(shù)據(jù)庫建立好了 create databases dailyfresh1807 charset = "utf8";)
python manage.py makemigration
python manage.py migrate