目录

生鲜超市(一)    生鲜超市(二)    生鲜超市(三)

生鲜超市(四)    生鲜超市(五)    生鲜超市(六)

生鲜超市(七)    生鲜超市(八)    生鲜超市(九)

生鲜超市(十)    生鲜超市(十一)    生鲜超市(十二)    生鲜超市(十三)

代码下载

github

教程

学习自慕课网-前端vue结合后端DjangoFramework的在线生鲜超市

三、Models设计

3.1.项目初始化

(1)进虚拟环境下安装

  • django2.0.2
  • djangorestframework和相关依赖mark,filter
  • pillow  图片处理
pip install djangorestframework

pip install -i https://pypi.douban.com/simple django==2.0.2

pip install markdown

pip install django-filter

pip install pillow

pip install pymysql

(2)创建项目

  • 项目:MxShop
  • app:users

 interpreter选择虚拟环境里面的python.exe

(3)Mysql的配置

settings中设置

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mxshop', #数据库名字
'USER': 'root', #账号
'PASSWORD': '', #密码
'HOST': '127.0.0.1', #IP
'PORT': '', #端口
#这里引擎用innodb(默认myisam)
#因为后面第三方登录时,要求引擎为INNODB
# 'OPTIONS':{'init_command': 'SET storage_engine=INNODB'}, #这样设置会报错,改为
"OPTIONS":{"init_command":"SET default_storage_engine=INNODB;"}
}
}

安装Mysqlclient

下载地址:

https://www.lfd.uci.edu/~gohlke/pythonlibs/

安装

pip install mysqlclient-1.3.12-cp36-cp36m-win_amd64

__init__.py添加代码:

import pymysql
pymysql.install_as_MySQLdb()

(4)项目目录结构搭建

新建两个python package

  • extra_apps   (扩展的源码包)
  • apps              (放所有app)

新建两个文件夹

  • media       (保存图片)
  • db_tools   (数据库相关)

把extra_apps和apps标记为sources root,然后settings中也要加路径

#settings.py

import sys

sys.path.insert(0,BASE_DIR)
sys.path.insert(0,os.path.join(BASE_DIR, 'apps'))
sys.path.insert(0,os.path.join(BASE_DIR, 'extra_apps'))

现在项目目录如下:

3.2.users models设计

(1)创建三个app

  • goods        商品
  • trade          交易
  • user_operation       用户操作

(2)users/models.py

# users/models.py
__author__ = 'derek' from datetime import datetime
from django.db import models
from django.contrib.auth.models import AbstractUser class UserProfile(AbstractUser):
"""
用户信息
"""
GENDER_CHOICES = (
("male", u"男"),
("female", u"女")
)
#用户用手机注册,所以姓名,生日和邮箱可以为空
name = models.CharField("姓名",max_length=30, null=True, blank=True)
birthday = models.DateField("出生年月",null=True, blank=True)
gender = models.CharField("性别",max_length=6, choices=GENDER_CHOICES, default="female")
mobile = models.CharField("电话",max_length=11)
email = models.EmailField("邮箱",max_length=100, null=True, blank=True) class Meta:
verbose_name = "用户信息"
verbose_name_plural = verbose_name def __str__(self):
return self.username class VerifyCode(models.Model):
"""
验证码
"""
code = models.CharField("验证码",max_length=10)
mobile = models.CharField("电话",max_length=11)
add_time = models.DateTimeField("添加时间",default=datetime.now) class Meta:
verbose_name = "短信验证"
verbose_name_plural = verbose_name def __str__(self):
return self.code

要想替换系统的用户,还要在settings中配置

#settings.py

#重载系统的用户,让UserProfile生效
AUTH_USER_MODEL = 'users.UserProfile'

(3)这里UserProfile继承AbstractUser,可以看看AbstractUser的源码

class AbstractUser(AbstractBaseUser, PermissionsMixin):
"""
An abstract base class implementing a fully featured User model with
admin-compliant permissions. Username and password are required. Other fields are optional.
"""
username_validator = UnicodeUsernameValidator() username = models.CharField(
_('username'),
max_length=150,
unique=True,
help_text=_('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
validators=[username_validator],
error_messages={
'unique': _("A user with that username already exists."),
},
)
first_name = models.CharField(_('first name'), max_length=30, blank=True)
last_name = models.CharField(_('last name'), max_length=150, blank=True)
email = models.EmailField(_('email address'), blank=True)
is_staff = models.BooleanField(
_('staff status'),
default=False,
help_text=_('Designates whether the user can log into this admin site.'),
)
is_active = models.BooleanField(
_('active'),
default=True,
help_text=_(
'Designates whether this user should be treated as active. '
'Unselect this instead of deleting accounts.'
),
)
date_joined = models.DateTimeField(_('date joined'), default=timezone.now) objects = UserManager() EMAIL_FIELD = 'email'
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email'] class Meta:
verbose_name = _('user')
verbose_name_plural = _('users')
abstract = True def clean(self):
super().clean()
self.email = self.__class__.objects.normalize_email(self.email) def get_full_name(self):
"""
Return the first_name plus the last_name, with a space in between.
"""
full_name = '%s %s' % (self.first_name, self.last_name)
return full_name.strip() def get_short_name(self):
"""Return the short name for the user."""
return self.first_name def email_user(self, subject, message, from_email=None, **kwargs):
"""Send an email to this user."""
send_mail(subject, message, from_email, [self.email], **kwargs)

源码

3.3.goods的model设计

(1)安装

安装好后把xadmin和DjangoUeditor放到extra_apps目录下面

(2)把四个app、xadmin和DjangoUeditor添加到 INSTALLED_APPS中

INSTALLED_APPS = [
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'users',
'goods',
'trade',
'user_operation',
'rest_framework',
'xadmin',
'crispy_forms',
'DjangoUeditor'
]

设置media的保存路径

#settings.py

MEDIA_ROOT = os.path.join(BASE_DIR, "media")

(3)商品分类model 设计

class GoodsCategory(models.Model):
"""
商品分类
"""
CATEGORY_TYPE = (
(1, "一级类目"),
(2, "二级类目"),
(3, "三级类目"),
) name = models.CharField('类别名',default="", max_length=30,help_text="类别名")
code = models.CharField("类别code",default="", max_length=30,help_text="类别code")
desc = models.TextField("类别描述",default="",help_text="类别描述")
#目录树级别
category_type = models.IntegerField("类目级别",choices=CATEGORY_TYPE,help_text="类目级别")
# 设置models有一个指向自己的外键
parent_category = models.ForeignKey("self", on_delete=models.CASCADE, null=True, blank=True, verbose_name="父类目级别", help_text="父目录",
related_name="sub_cat")
is_tab = models.BooleanField("是否导航",default=False,help_text="是否导航")
add_time = models.DateTimeField("添加时间",default=datetime.now) class Meta:
verbose_name = "商品类别"
verbose_name_plural = verbose_name def __str__(self):
return self.name

(4)商品model设计

class Goods(models.Model):
"""
商品
"""
category = models.ForeignKey(GoodsCategory, on_delete=models.CASCADE, verbose_name="商品类目")
goods_sn = models.CharField("商品唯一货号",max_length=50, default="")
name = models.CharField("商品名",max_length=100,)
click_num = models.IntegerField("点击数",default=0)
sold_num = models.IntegerField("商品销售量",default=0)
fav_num = models.IntegerField("收藏数",default=0)
goods_num = models.IntegerField("库存数",default=0)
market_price = models.FloatField("市场价格",default=0)
shop_price = models.FloatField("本店价格",default=0)
goods_brief = models.TextField("商品简短描述",max_length=500)
goods_desc = UEditorField(verbose_name=u"内容", imagePath="goods/images/", width=1000, height=300,
filePath="goods/files/", default='')
ship_free = models.BooleanField("是否承担运费",default=True)
# 首页中展示的商品封面图
goods_front_image = models.ImageField(upload_to="goods/images/", null=True, blank=True, verbose_name="封面图")
# 首页中新品展示
is_new = models.BooleanField("是否新品",default=False)
# 商品详情页的热卖商品,自行设置
is_hot = models.BooleanField("是否热销",default=False)
add_time = models.DateTimeField("添加时间",default=datetime.now) class Meta:
verbose_name = '商品信息'
verbose_name_plural = verbose_name def __str__(self):
return self.name class GoodsImage(models.Model):
"""
商品轮播图
"""
goods = models.ForeignKey(Goods, on_delete=models.CASCADE, verbose_name="商品", related_name="images")
image = models.ImageField(upload_to="", verbose_name="图片", null=True, blank=True)
add_time = models.DateTimeField("添加时间", default=datetime.now) class Meta:
verbose_name = '商品轮播'
verbose_name_plural = verbose_name def __str__(self):
return self.goods.name

(4)首页商品轮播图model设计

因为首页的商品轮播图片是大图,跟商品详情里面的图片不一样,所以要单独写一个首页轮播图model

class Banner(models.Model):
"""
首页轮播的商品
"""
goods = models.ForeignKey(Goods, on_delete=models.CASCADE, verbose_name="商品")
image = models.ImageField(upload_to='banner', verbose_name="轮播图片")
index = models.IntegerField("轮播顺序",default=0)
add_time = models.DateTimeField("添加时间", default=datetime.now) class Meta:
verbose_name = '首页轮播'
verbose_name_plural = verbose_name def __str__(self):
return self.goods.name

(5)商品广告和热搜model

class HotSearchWords(models.Model):
"""
搜索栏下方热搜词
"""
keywords = models.CharField("热搜词",default="", max_length=20)
index = models.IntegerField("排序",default=0)
add_time = models.DateTimeField("添加时间", default=datetime.now) class Meta:
verbose_name = '热搜排行'
verbose_name_plural = verbose_name def __str__(self):
return self.keywords
#goods/models.py
__author__ = 'derek' from datetime import datetime
from django.db import models
from DjangoUeditor.models import UEditorField class GoodsCategory(models.Model):
"""
商品分类
"""
CATEGORY_TYPE = (
(1, "一级类目"),
(2, "二级类目"),
(3, "三级类目"),
) name = models.CharField('类别名',default="", max_length=30,help_text="类别名")
code = models.CharField("类别code",default="", max_length=30,help_text="类别code")
desc = models.TextField("类别描述",default="",help_text="类别描述")
#目录树级别
category_type = models.IntegerField("类目级别",choices=CATEGORY_TYPE,help_text="类目级别")
# 设置models有一个指向自己的外键
parent_category = models.ForeignKey("self", on_delete=models.CASCADE, null=True, blank=True, verbose_name="父类目级别", help_text="父目录",
related_name="sub_cat")
is_tab = models.BooleanField("是否导航",default=False,help_text="是否导航")
add_time = models.DateTimeField("添加时间",default=datetime.now) class Meta:
verbose_name = "商品类别"
verbose_name_plural = verbose_name def __str__(self):
return self.name class GoodsCategoryBrand(models.Model):
"""
某一大类下的宣传商标
"""
category = models.ForeignKey(GoodsCategory, on_delete=models.CASCADE, related_name='brands', null=True, blank=True, verbose_name="商品类目")
name = models.CharField("品牌名",default="", max_length=30,help_text="品牌名")
desc = models.TextField("品牌描述",default="", max_length=200,help_text="品牌描述")
image = models.ImageField(max_length=200, upload_to="brands/")
add_time = models.DateTimeField("添加时间",default=datetime.now) class Meta:
verbose_name = "宣传品牌"
verbose_name_plural = verbose_name
db_table = "goods_goodsbrand" def __str__(self):
return self.name class Goods(models.Model):
"""
商品
"""
category = models.ForeignKey(GoodsCategory, on_delete=models.CASCADE, verbose_name="商品类目")
goods_sn = models.CharField("商品唯一货号",max_length=50, default="")
name = models.CharField("商品名",max_length=100,)
click_num = models.IntegerField("点击数",default=0)
sold_num = models.IntegerField("商品销售量",default=0)
fav_num = models.IntegerField("收藏数",default=0)
goods_num = models.IntegerField("库存数",default=0)
market_price = models.FloatField("市场价格",default=0)
shop_price = models.FloatField("本店价格",default=0)
goods_brief = models.TextField("商品简短描述",max_length=500)
goods_desc = UEditorField(verbose_name=u"内容", imagePath="goods/images/", width=1000, height=300,
filePath="goods/files/", default='')
ship_free = models.BooleanField("是否承担运费",default=True)
# 首页中展示的商品封面图
goods_front_image = models.ImageField(upload_to="goods/images/", null=True, blank=True, verbose_name="封面图")
# 首页中新品展示
is_new = models.BooleanField("是否新品",default=False)
# 商品详情页的热卖商品,自行设置
is_hot = models.BooleanField("是否热销",default=False)
add_time = models.DateTimeField("添加时间",default=datetime.now) class Meta:
verbose_name = '商品信息'
verbose_name_plural = verbose_name def __str__(self):
return self.name class GoodsImage(models.Model):
"""
商品轮播图
"""
goods = models.ForeignKey(Goods, on_delete=models.CASCADE, verbose_name="商品", related_name="images")
image = models.ImageField(upload_to="", verbose_name="图片", null=True, blank=True)
add_time = models.DateTimeField("添加时间", default=datetime.now) class Meta:
verbose_name = '商品轮播'
verbose_name_plural = verbose_name def __str__(self):
return self.goods.name class Banner(models.Model):
"""
首页轮播的商品
"""
goods = models.ForeignKey(Goods, on_delete=models.CASCADE, verbose_name="商品")
image = models.ImageField(upload_to='banner', verbose_name="轮播图片")
index = models.IntegerField("轮播顺序",default=0)
add_time = models.DateTimeField("添加时间", default=datetime.now) class Meta:
verbose_name = '首页轮播'
verbose_name_plural = verbose_name def __str__(self):
return self.goods.name class IndexAd(models.Model):
"""
商品广告
"""
category = models.ForeignKey(GoodsCategory, on_delete=models.CASCADE, related_name='category',verbose_name="商品类目")
goods =models.ForeignKey(Goods, on_delete=models.CASCADE, related_name='goods') class Meta:
verbose_name = '首页广告'
verbose_name_plural = verbose_name def __str__(self):
return self.goods.name class HotSearchWords(models.Model):
"""
搜索栏下方热搜词
"""
keywords = models.CharField("热搜词",default="", max_length=20)
index = models.IntegerField("排序",default=0)
add_time = models.DateTimeField("添加时间", default=datetime.now) class Meta:
verbose_name = '热搜排行'
verbose_name_plural = verbose_name def __str__(self):
return self.keywords

goods/models.py

3.4.trade交易的model设计

trade/models.py

# trade/models.py
__author__ = 'derek' from datetime import datetime
from django.db import models from goods.models import Goods # get_user_model方法会去setting中找AUTH_USER_MODEL
from django.contrib.auth import get_user_model
User = get_user_model() # Create your models here.
class ShoppingCart(models.Model):
"""
购物车
"""
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="用户")
goods = models.ForeignKey(Goods, on_delete=models.CASCADE, verbose_name="商品")
nums = models.IntegerField("购买数量",default=0) add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间") class Meta:
verbose_name = '购物车喵'
verbose_name_plural = verbose_name
unique_together = ("user", "goods") def __str__(self):
return "%s(%d)".format(self.goods.name, self.nums) class OrderInfo(models.Model):
"""
订单信息
"""
ORDER_STATUS = (
("TRADE_SUCCESS", "成功"),
("TRADE_CLOSED", "超时关闭"),
("WAIT_BUYER_PAY", "交易创建"),
("TRADE_FINISHED", "交易结束"),
("paying", "待支付"),
)
PAY_TYPE = (
("alipay", "支付宝"),
("wechat", "微信"),
) user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="用户")
#订单号唯一
order_sn = models.CharField("订单编号",max_length=30, null=True, blank=True, unique=True)
# 微信支付会用到
nonce_str = models.CharField("随机加密串",max_length=50, null=True, blank=True, unique=True)
# 支付宝交易号
trade_no = models.CharField("交易号",max_length=100, unique=True, null=True, blank=True)
#支付状态
pay_status = models.CharField("订单状态",choices=ORDER_STATUS, default="paying", max_length=30)
# 订单的支付类型
pay_type = models.CharField("支付类型",choices=PAY_TYPE, default="alipay", max_length=10)
post_script = models.CharField("订单留言",max_length=200)
order_mount = models.FloatField("订单金额",default=0.0)
pay_time = models.DateTimeField("支付时间",null=True, blank=True) # 用户信息
address = models.CharField("收货地址",max_length=100, default="")
signer_name = models.CharField("签收人",max_length=20, default="")
singer_mobile = models.CharField("联系电话",max_length=11) add_time = models.DateTimeField("添加时间",default=datetime.now) class Meta:
verbose_name = "订单信息"
verbose_name_plural = verbose_name def __str__(self):
return str(self.order_sn) class OrderGoods(models.Model):
"""
订单内的商品详情
"""
# 一个订单对应多个商品
order = models.ForeignKey(OrderInfo, on_delete=models.CASCADE, verbose_name="订单信息", related_name="goods")
# 两个外键形成一张关联表
goods = models.ForeignKey(Goods, on_delete=models.CASCADE, verbose_name="商品")
goods_num = models.IntegerField("商品数量",default=0) add_time = models.DateTimeField("添加时间",default=datetime.now) class Meta:
verbose_name = "订单商品"
verbose_name_plural = verbose_name def __str__(self):
return str(self.order.order_sn)

3.5.用户操作的model设计

user_operation/models.py

# user_operation/models.py
__author__ = 'derek' from datetime import datetime
from django.db import models
from goods.models import Goods from django.contrib.auth import get_user_model
User = get_user_model() class UserFav(models.Model):
"""
用户收藏操作
"""
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="用户")
goods = models.ForeignKey(Goods, on_delete=models.CASCADE, verbose_name="商品", help_text="商品id")
add_time = models.DateTimeField("添加时间",default=datetime.now) class Meta:
verbose_name = '用户收藏'
verbose_name_plural = verbose_name
unique_together = ("user", "goods") def __str__(self):
return self.user.username class UserAddress(models.Model):
"""
用户收货地址
"""
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="用户" )
province = models.CharField("省份",max_length=100, default="")
city = models.CharField("城市",max_length=100, default="")
district = models.CharField("区域",max_length=100, default="")
address = models.CharField("详细地址",max_length=100, default="")
signer_name = models.CharField("签收人",max_length=100, default="")
signer_mobile = models.CharField("电话",max_length=11, default="")
add_time = models.DateTimeField("添加时间",default=datetime.now) class Meta:
verbose_name = "收货地址"
verbose_name_plural = verbose_name def __str__(self):
return self.address class UserLeavingMessage(models.Model):
"""
用户留言
"""
MESSAGE_CHOICES = (
(1, "留言"),
(2, "投诉"),
(3, "询问"),
(4, "售后"),
(5, "求购")
)
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="用户")
message_type = models.IntegerField(default=1, choices=MESSAGE_CHOICES, verbose_name="留言类型",
help_text=u"留言类型: 1(留言),2(投诉),3(询问),4(售后),5(求购)")
subject = models.CharField("主题",max_length=100, default="")
message = models.TextField("留言内容",default="",help_text="留言内容")
file = models.FileField(upload_to="message/images/", verbose_name="上传的文件", help_text="上传的文件")
add_time = models.DateTimeField("添加时间",default=datetime.now) class Meta:
verbose_name = "用户留言"
verbose_name_plural = verbose_name def __str__(self):
return self.subject

Django REST framework+Vue 打造生鲜超市(二)的更多相关文章

  1. Django REST framework+Vue 打造生鲜超市(十二)

    十三.首页.商品数量.缓存和限速功能开发  13.1.轮播图接口实现 首先把pycharm环境改成本地的,vue中local_host也改成本地 (1)goods/serializer class B ...

  2. Django REST framework+Vue 打造生鲜超市(三)

    四.xadmin后台管理 4.1.xadmin添加富文本插件 (1)xadmin/plugins文件夹下新建文件ueditor.py 代码如下: # xadmin/plugins/ueditor.py ...

  3. Django REST framework+Vue 打造生鲜超市(四)

    五.商品列表页 5.1.django的view实现商品列表页 (1)goods/view_base.py 在goods文件夹下面新建view_base.py,为了区分django和django res ...

  4. Django REST framework+Vue 打造生鲜超市(五)

    六.商品类别数据展示 6.1. 商品类别数据接口 (1)商品分类有两个接口: 一种是全部分类:一级二级三级 一种是某一类的分类以及商品详细信息: 开始写商品分类的接口 (2)序列化 给分类添加三级分类 ...

  5. Django REST framework+Vue 打造生鲜超市(一)

    一.项目介绍 1.1.掌握的技术 Vue + Django Rest Framework 前后端分离技术 彻底玩转restful api 开发流程 Django Rest Framework 的功能实 ...

  6. Django REST framework+Vue 打造生鲜超市(六)

    七.用户登录与手机注册 7.1.drf的token (1)INSTALL_APP中添加 INSTALLED_APPS = ( ... 'rest_framework.authtoken' ) toke ...

  7. Django REST framework+Vue 打造生鲜超市(十)

    十一.pycharm远程代码调试 第三方登录和支付,都需要有服务器才行(回调url),我们可以用pycharm去远程调试服务器代码 服务器环境搭建 以全新阿里云centos7系统为例: 11.1.阿里 ...

  8. Django REST framework+Vue 打造生鲜超市(十一)

    十二.支付宝沙箱环境配置 12.1.创建应用 进入蚂蚁金服开放平台(https://open.alipay.com/platform/home.htm),登录后进入管理中心-->>应用列表 ...

  9. Django REST framework+Vue 打造生鲜超市(十三)

    目录 生鲜超市(一)    生鲜超市(二)    生鲜超市(三) 生鲜超市(四)    生鲜超市(五)    生鲜超市(六) 生鲜超市(七)    生鲜超市(八)    生鲜超市(九) 生鲜超市(十) ...

随机推荐

  1. python中的小知识点

    这里是一些小知识点的汇集,为的是以后查找的方便. 行与缩进: 物理行:实际看到的代码行数. 逻辑行:在意义上的函数(即解释器执行的行数) 如果一个物理行中包含了多个逻辑行,则每个逻辑行之间需要用分号 ...

  2. JS中的闭包问题

    一.闭包:在函数外也可使用局部变量的特殊语法现象 全局变量 VS 局部变量: 全局变量:优点:可共享,可重用; 缺点:在任意位置都可随意修改——全局污染 局部变量:优点:安全 缺点:不可共享,不可重用 ...

  3. Java 小记 — Spring Boot 的实践与思考

    前言 本篇随笔用于记录我在学习 Java 和构建 Spring Boot 项目过程中的一些思考,包含架构.组件和部署方式等.下文仅为概要,待闲时逐一整理为详细文档. 1. 组件 开源社区如火如荼,若在 ...

  4. 【技术】关于安卓使用禁用服务(或者是MYANDROIDTOOLS里面的禁用服务)后卡在开机页面的(或者是卡在各种页面的)

    目前会出现禁用部分服务后卡在开机页面,导致到手机数据得全部清除在网上找了很久,都没找到还原的方法只好自己开垦新方案了推测:由于格式化DATA分区后,手机可以正常开机,所以认为禁用服务的配置内容保存在D ...

  5. htop命令使用详解

    一.htop 简介 htop 是Linux系统中的一个互动的进程查看器,一个文本模式的应用程序(在控制台或者X终端中),需要ncurses.与Linux传统的top相比,htop更加人性化.它可让用户 ...

  6. ios开发数据库版本迁移手动更新迭代和自动更新迭代艺术(二)

    由于大家都热衷于对ios开发数据库版本迁移手动更新迭代和自动更新迭代艺术(一)的浏览下面我分享下我的源文件git仓库: 用法(这边我是对缓存的一些操作不需要可以省去):https://github.c ...

  7. Firefox书签同步工具Xmarks

    Xmarks作为Firefox最受欢迎的社会化书签扩展之一,其前身为Foxmarks,并且显著的增加了它的功能.Xmarks已被LastPass(领先的密码和数据管理)收购. 之前一直是只使用火狐浏览 ...

  8. WP-player——WordPress的一款好用的音乐插件

    作者的主页:http://webjyh.com/wp-player/ 安装:在WordPress后台搜索安装即可,或者去作者的主页下载安装. 使用方法:这个插件是通过短代码调用的,安装好插件之后便可以 ...

  9. Linux编辑器篇-分享10个最好的Markdown编辑器

    在这篇文章中,兄弟连Linux培训会分享一些可以在 Linux 上安装使用的最好的 Markdown 编辑器.虽然你在 Linux 平台上能找到非常多的 的 Markdown 编辑器,但是在这里我们将 ...

  10. Java内存区域之程序计数器--《深入理解Java虚拟机》学习笔记及个人理解(一)

    Java虚拟机程序计数器 在书上的P39页 程序计数器干嘛的? 有了它,字节码解释器才可以知道下一条要执行的字节码指令是哪个. 无论是取下一条指令还是分支.循环.跳转.中断.线程恢复,都需要这个程序计 ...