django项目——爱鲜蜂

项目源代码地址:https://github.com/SongJiaxin95/axf
项目部署地址:118.25.211.249/

项目图:

image.png

一、创建项目

创建虚拟环境

virtualenv --no-site-packages django_axf_env

进入虚拟环境

cd django_axf_env/Scripts 
activate

在虚拟环境中安装项目所需要的包

pip install Django==1.11
pip install PyMySQL
pip install Pillow

创建django项目

不要在虚拟文件夹下创建
d:
django-admin startproject axf

创建app

cd axf
python manage.py startapp app
打开pycharm,打开d盘下创建的axf项目,file>settings>project:axf>project interpreter>齿轮图标>add python Interpreter>Virtualenv Environment>Existing environment>选择刚才所创建虚拟环境的目录>django_axf_env/Scripts/python.exe>ok

二、配置

settings.py
  • 在INSTALLED_APPS中添加'app'
  • TEMPLATES的DIRS改为
'DIRS': [os.path.join(BASE_DIR, 'templates')],
  • DATABASES配置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # 使用mysql
        'NAME': 'axf', # 数据库名
        'USER': 'root', # 用户名
        'PASSWORD': 'root', # 密码
        'PORT': '3306', # 端口
        'HOST': 'localhost' # 主机地址
    }
}
  • LANGUAGE_CODE = 'zh-hans'
  • TIME_ZONE = 'Asia/Shanghai'
  • 配置静态文件
STATIC_URL = '/static/'
# STATIC_ROOT = os.path.join(BASE_DIR,'static')  # 项目部署时需要
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')
]
  • 配置上传文件路径
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

然后在项目下新建三个文件夹templates、static、media。

__init__.py
import pymysql
pymysql.install_as_MySQLdb()
debug

点击菜单中的Run>Debug>Edit>左上角绿色加号>python>name 随便取,script path选择项目下的manage.py文件,parameters填 'runserver 8000'>ok


image.png

image.png

三、创建模型

app下的models.py

from django.db import models

# Create your models here.

class Main(models.Model):
    img = models.CharField(max_length=200)  # 图片
    name = models.CharField(max_length=100)  # 名称
    trackid = models.CharField(max_length=16)  # id

    class Meta:
        abstract = True

class MainWheel(Main):
    class Meta:
        db_table = 'axf_wheel'

class MainNav(Main):
    class Meta:
        db_table = 'axf_nav'

class MainHotGoods(Main):
    class Meta:
        db_table = 'axf_hotgoods'

class MainShop(Main):
    class Meta:
        db_table = 'axf_shop'

class MainShow(Main):
    categoryid = models.CharField(max_length=16,null=True)
    brandname = models.CharField(max_length=100,null=True)
    img1 = models.CharField(max_length=200)
    childcid1 = models.CharField(max_length=16,null=True)
    productid1 = models.CharField(max_length=16,null=True)
    longname1 = models.CharField(max_length=100)
    price1 = models.FloatField(default=0)
    marketprice1 = models.FloatField(default=1)
    img2 = models.CharField(max_length=200)
    childcid2 = models.CharField(max_length=16,null=True)
    productid2 = models.CharField(max_length=16,null=True)
    longname2 = models.CharField(max_length=100)
    price2 = models.FloatField(default=0)
    marketprice2 = models.FloatField(default=1)
    img3 = models.CharField(max_length=200)
    childcid3 = models.CharField(max_length=16,null=True)
    productid3 = models.CharField(max_length=16,null=True)
    longname3 = models.CharField(max_length=100)
    price3 = models.FloatField(default=0)
    marketprice3 = models.FloatField(default=1)

    class Meta:
        db_table = 'axf_mainshow'

# 闪购左侧模型
class FoodType(models.Model):
    typeid = models.CharField(max_length=60)
    typename = models.CharField(max_length=100)
    childtypenames = models.CharField(max_length=200)
    typesort = models.IntegerField(default=1)

    class Meta:
        db_table = 'axf_foodtypes'


class Goods(models.Model):
    productid = models.CharField(max_length=16)  # 商品的id
    productimg = models.CharField(max_length=200)  # 商品的图片
    productname = models.CharField(max_length=100)  # 商品的名称
    productlongname = models.CharField(max_length=200)  # 商品的规格
    isxf = models.IntegerField(default=1)
    pmdesc = models.CharField(max_length=100)
    specifics = models.CharField(max_length=100)  # 规格
    price = models.FloatField(default=0)  # 商品的折后价格
    marketprice = models.FloatField(default=1)  # 商品的原价
    categoryid = models.CharField(max_length=16)  # 分类的id
    childcid = models.CharField(max_length=16)  # 子分类的id
    childcidname = models.CharField(max_length=100)  # 子分类的名称
    dealerid = models.CharField(max_length=16)
    storenums = models.IntegerField(default=1)  # 排序
    productnum = models.IntegerField(default=1)  # 销量排序

    class Meta:
        db_table = 'axf_goods'

class UserModel(models.Model):
    username = models.CharField(max_length=32,unique=True)
    password = models.CharField(max_length=256)
    email = models.CharField(max_length=64, unique=True)
    # Falsh代表女
    sex = models.BooleanField(default=False)
    icon = models.ImageField(upload_to='icon')
    is_delete = models.BooleanField(default=False)
    ticket = models.CharField(max_length=30,null=True)

    class Meta:
        db_table = 'axf_user'

# 购物车
class CarModel(models.Model):
    user = models.ForeignKey(UserModel)  # 关联用户
    goods = models.ForeignKey(Goods)  # 关联商品
    c_num = models.IntegerField(default=1)  # 商品的个数
    is_select = models.BooleanField(default=True)  # 是否选择商品

    class Meta:
        db_table = 'axf_cart'

class OrderModel(models.Model):
    user = models.ForeignKey(UserModel)  # 关联用户
    o_num = models.CharField(max_length=64)  # 数量
    # 0 代表下单,但是未付款 1 代表已付款未发货 2 已付款。已发货
    o_status = models.IntegerField(default=0)  # 状态
    o_create = models.DateTimeField(auto_now_add=True)  # 创建时间

    class Meta:
        db_table = 'axf_order'


class OrderGoodsModel(models.Model):
    goods = models.ForeignKey(Goods)  # 关联的商品
    order = models.ForeignKey(OrderModel)  # 关联的订单
    good_num = models.IntegerField(default=1)  # 商品的个数

    class Meta:
        db_table = 'axf_order_goods'

class UserTicketModel(models.Model):
    user = models.ForeignKey(UserModel)
    ticket = models.CharField(max_length=30,null=True)
    out_time = models.DateTimeField()

    class Meta:
        db_table = 'axf_user_ticket'

使用navicate或者其他数据库可视化工具 新建数据库axf
然后在Terminal中或者命令行中输入命令

python manage.py makemigrations
python manage.py migrate

然后在数据库中表就创建好了


image.png

image.png

四、完整流程

  • 在项目文件axf下的url.py中编写
from django.conf.urls import url,include
from django.contrib import admin
# from django.views.static import serve
# from axftest import settings
from app import views
urlpatterns = [
    # url(r'static/(?P<path>.*)$',serve,{"document_root":settings.STATIC_ROOT},),
    # url(r'media/(?P<path>.*)$',serve,{"document_root":settings.MEDIA_ROOT},),
    url(r'^admin/', admin.site.urls),
    url(r'axf/',include('app.urls',namespace='axf')),
    url(r'^$',views.Home) # 不加路径默认访问home主页
]

注释的地方是项目部署时需要添加的

  • 在app目录下新建urls.py的python文件,编写url路由
from django.conf.urls import url
from app import views
urlpatterns = [
    # 首页
    url(r'home/',views.Home,name='home'),
    # 闪购
    url(r'market/',views.Market,name='market'),
    # 购物车
    url(r'cart/',views.Cart,name='cart'),
    # 个人中心
    url(r'mine/',views.Mine,name='mine'),
]

因为base_main.html模板中的a标签已经写好了url,所以把四个路由都写了,不然会报错

  • 在views.py中编写方法
from django.shortcuts import render

# 首页
def Home(request):
    return render(request, 'home/home.html')

# 闪购
def Market(request):
    return render(request,'market/market.html')

# 购物车
def Cart(request):
    return render(request,'cart/cart.html')

# 个人中心
def Mine(request):
    return render(request,'mine/mine.html')

现在就可以访问http://127.0.0.1:8000/axf/home/或http://127.0.0.1:8000/来访问到首页了
接下来就是从数据库获取数据添加到页面
编写Home方法:

def Home(request):
    if request.method == 'GET':
        date = {'wheels': MainWheel.objects.all(),  # 轮播
                'navs': MainNav.objects.all(),  # 导航
                'hotgoods': MainHotGoods.objects.all(),  # 热购
                'shops': MainShop.objects.all(),  # 商店展示
                'mainshows': MainShow.objects.all()  # 主要商品展示
                }
        return render(request, 'home/home.html', date)

home.html 页面解析数据

<!--处理轮播banner图-->
    {% for wheel in wheels %}
        <div class="swiper-slide">
            <a href="#">
                <img src="{{ wheel.img }}" alt="">
            </a>
        </div>
    {% endfor %}
<!-- 处理结束 -->

<!-- 处理导航数据 -->
{% for nav in navs %}
    <li>
        <img src="{{ nav.img }}" alt="">
            <span></span>
    </li>
{% endfor %}
<!--处理结束-->

<!-- 处理必购商品信息 -->
{% for hotgood in hotgoods %}
    <li class="swiper-slide">
        <img src="{{ hotgood.img }}" alt="">
    </li>
{% endfor %}
<!-- 处理结束 -->

{#          商店    #}
<div class="CVS">
    <!--处理第一个店铺的数据的图片-->
{% for shop in shops %}
{% ifequal forloop.counter 1 %}
    <h2>
        <img src="{{ shop.img }}" alt="">
    </h2>
{% endifequal %}
{% endfor %}
    <!--处理结束-->
 {% for shop in shops %}
     {% if forloop.counter > 1 and forloop.counter < 4 %}
         {% ifequal forloop.counter 2 %}
    <fieldset>
         {% endifequal %}
        <!--处理第二个到第四个数据-->
            <a href="#">
                <img src="{{ shop.img }}" alt="">
            </a>
        <!--处理结束-->
        {% ifequal forloop.counter 3 %}
    </fieldset>
        {% endifequal %}
    {% endif %}
 {% endfor %}

{% for shop in shops %}
    {% if forloop.counter > 3 and forloop.counter < 8 %}
        {% ifequal forloop.counter 4 %}
    <ul>
        {% endifequal %}
        <!--处理第五个到第八个数据-->
            <li>
                <a href="#">
                    <img src="{{ shop.img }}" alt="">
                    <span></span>
                </a>
            </li>
        <!--处理结束-->
        {% ifequal forloop.counter 7 %}
    </ul>
        {% endifequal %}
    {% endif %}
{% endfor %}
{% for shop in shops %}
    {% if forloop.counter > 7 and forloop.counter < 12 %}
        {% ifequal forloop.counter 8 %}
    <ol>
        {% endifequal %}
        <!--处理第八个到第十二个数据-->
            <li>
                <a href="#">
                    <img src="{{ shop.img }}" alt="">
                </a>
            </li>
        <!--处理结束-->

        {% ifequal forloop.counter 11 %}
    </ol>
        {% endifequal %}
    {% endif %}
{% endfor %}
</div>

<!--商品展示-->
{% for mainshow in mainshows %}
    <section>
        <h3>{{ mainshow.name }}<span></span><a href="#">更多&gt;</a></h3>
        <div>
            <a href="#">
                <img src="{{ mainshow.img }}" alt="">
            </a>
        </div>
        <ul>
            <li>
                <a href="#">
                    <img src="{{ mainshow.img1 }}" alt="">
                    <p class="description">

                    </p>
                    <span>¥{{ mainshow.price1 }}</span>
                    <s>¥{{ mainshow.marketprice1 }}</s>
                </a>
                <button>
                    <span>+</span>
                </button>
            </li>
           <li>
                <a href="#">
                    <img src="{{ mainshow.img2 }}" alt="">
                    <p class="description">

                    </p>
                    <span>¥{{ mainshow.price2 }}</span>
                    <s>¥{{ mainshow.marketprice2 }}</s>
                </a>
                <button>
                    <span>+</span>
                </button>
            </li>
           <li>
                <a href="#">
                    <img src="{{ mainshow.img3 }}" alt="">
                    <p class="description">

                    </p>
                    <span>¥{{ mainshow.price3 }}</span>
                    <s>¥{{ mainshow.marketprice3 }}</s>
                </a>
                <button>
                    <span>+</span>
                </button>
            </li>
        </ul>
    </section>
{% endfor %}
<!--商品展示结束-->
image.png

后端传到前端的数据均是以字典形式传递(ajax使用jason格式数据,传对象需要序列化)
前端传数据到后端,get请求在url后面加'?',使用键值对

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

推荐阅读更多精彩内容