精华内容
下载资源
问答
  • Django电商网站全代码

    2019-01-26 09:13:48
    django开发的生鲜蔬果电商网站平台。基本功能已经实现,数据库搭建完成。双向登录检测,购物车搭建,商城货架搭建等等
  • 基于Django框架 的电商项目,包含用户模块(登录,注册等),商品模块(购物车,搜索引擎等),订单模块,支付模块(对接支付宝),部署
  • django是当前最流行的web框架之一,这是用django rest+vue做的一个电商项目,有学习和参考价值
  • Django电商网站项目(4)--商品模块

    千次阅读 2019-06-09 20:28:22
    FastDFS在前文中已有过介绍,在Django中通过Nginx与FastDFS联用的方法可参考网上的方法或我的项目代码中的教程(github中),此处只描述流程。 配置FastDFS与Nginx与Django 其他部分略,在Django的配置中添加: #...

    前文中已设计了与商品模块有关的表如下:
    在这里插入图片描述
    首页活动表用于展示一些活动图片(并附带活动链接);
    首页轮播表用于展示一些轮播图片(具体轮播的效果在前端使用CSS完成);
    首页展示表用于展示首页按分类排列后的一部分具体商品,展示方式意为以图片展示或以文字展示;
    商品图片表用于存储商品图片,由于一种SKU商品可能有多张图片,因此将其专门提出制作一个表;
    商品种类表用于存储商品的种类,即类似于水果/蔬菜/肉类此种大分类;
    商品SKU与SPU表存储商品的具体信息。
    注:虽然有专用于存储商品图片的商品图片表,但为了方便和减少查询次数起见还是在需要的表中添加了图片字段(用于存储一张显示于主页的图片),注意所有的图片类型其在数据库保存的都是一个图片的URL而非图片本身。

    使用FastDFS保存图片

    FastDFS在前文中已有过介绍,在Django中通过Nginx与FastDFS联用的方法可参考网上的方法或我的项目代码中的教程(github中),此处只描述流程。
    配置FastDFS与Nginx与Django
    其他部分略,在Django的配置中添加:

    # 设置Django的文件存储类并指定路径,若不设置则默认为系统自带的文件存储类
    DEFAULT_FILE_STORAGE = 'utils.fdfs.storage.FDFSStorage'
    # 设置fdfs所需要的参数
    FDFS_CLIENT_OPTION = {
        'FDFS_CLIENT_CONF': './utils/fdfs/client.conf',
        'BASE_URL': 'http://192.168.85.178:8888/',
        'SERVER_IP': '192.168.85.178',
    }
    

    在相应的路径下即 项目主目录/utils/fdfs/storage.py 中自定义文件存储类,其需要依照Django的规范进行定义,代码如下:

    from django.core.files.storage import Storage
    from django.conf import settings
    from fdfs_client.client import *
    
    class FDFSStorage(Storage):
    	'''fdfs文件存储类'''
    	def __init__(self, option=None):
    		if not option:
    			self.option = settings.FDFS_CLIENT_OPTION
    		else:
    			self.option = option
    
    	def _open(self, name, mode='rb'):
    		'''需要返回一个文件对象,用于直接打开文件'''
    		pass
    
    	def _save(self, name, content):
    		'''保存文件时使用,name为选择上传文件的名字,content为一个包含上传文件内容的File类实例对象'''
    		conf = get_tracker_conf(self.option.get('FDFS_CLIENT_CONF'))
    		client = Fdfs_client(conf)
    		# 上传文件到fdfs中,根据内容上传文件
    		res = client.upload_by_buffer(content.read())
    		#res是一个字典格式的结果
    		if res.get('Status') != 'Upload successed.':
    			# 上传失败
    			raise Exception('上传文件失败')
    		filename = res.get('Remote file_id')
    		# 返回的内容即在数据表中保存的内容,由于返回的是bytes,将其解码
    		return filename.decode('utf-8')
    
    	def exists(self, name):
    		'''判断name在Django中是否可用,由于使用fdfs保存文件,因此直接返回False表示文件名可用'''
    		return False
    
    	def url(self, name):
    		'''返回访问文件的url路径'''
    		return (self.option.get('BASE_URL')+name)
    

    配置完成后,在admin界面上传图片时就直接调用此重写的文件存储类,将数据保存于与Django关联的fdfs存储文件夹中,并返回一个拼接过的url用于访问。
    浏览器访问图片的流程
    如图所示。
    在这里插入图片描述
    注意此处生成的URL已经不是Django服务器的地址,而是配置的nginx服务器的地址,因此将其应用到模板中后,用户通过浏览器访问到的图片是直接通过nginx访问了fdfs中的图片,没有经过Django,减少了Django服务器的压力。

    首页的显示与优化

    商品首页的显示
    商品首页的显示分为以下几个部分:
    ①首页广告;
    ②首页轮播商品;
    ③首页分类与分类商品;
    ④判断用户是否登录及购物车数目。
    ①②③:基础逻辑类似,从数据库中获取信息并传入模板,③中对于分类商品的显示,由于其显示的类型可能不同(图片或文字),因此可以动态的对查询到的商品种类模型类实例添加其对应的不同显示类型的商品模型类实例,减少模板使用中的逻辑,且代码整体更简洁。
    ④:判断用户是否登录,Django的认证系统会给每个请求添加user属性,可以方便的使用user.is_authenticated判断是否登录,然后获取购物车相关的信息,对于购物车的设计思路如下:
    Ⅰ添加:当用户选择添加到购物车时需要添加购物车记录,详情页/列表页;
    Ⅱ获取:当使用购物车数据和访问购物车页面时需要获取购物车记录;
    Ⅲ存储:使用redis存储(在内存中);
    Ⅳ如何存储:一个用户的购物车记录用一条数据保存,使用hash类型保存,cart_userid:{sku_id1:数量, sku_id2:数量}。
    关于购物车的添加等功能在购物车模块中详细设计,此处直接查询数据库中购物车的相关数据,并提供一个数量参数传入模板。

    商品首页的优化
    关于网站页面(多为首页)的优化主要分为两部分,静态页面的使用和缓存的使用,如下:
    ①因为首页内容需要查询表单多,且变化频率不高,因此使用celery生成首页的静态页面,设置当管理员修改相应后台页面时重新生成;
    ②原因同上,但由于登录用户的用户信息需要在django中获取,因此使用django缓存,将页面信息存放在缓存中,使用时先从缓存中获取;
    ③目的:网站本身性能的优化,减少数据库查询的次数,防止恶意攻击,并在一定程度上防止DDOS攻击。

    实现①:使用celery,生成的静态文件模板是没有用户登录的模板,生成页面即使用render方法渲染模板后不直接返回(因为生成的模板中不包含用户信息,因此需要使用新的模板用于渲染),将生成的内容写入文件(即生成一个新的html文件),生成的新文件位于celery服务器上,要实现此过程需要在celery中添加任务,并设置当管理员修改相应后台页面时重新生成,生成静态页面文件的代码如下:

    def generate_static_index_html():
    	'''产生首页的静态页面'''
    	# 获取商品的种类信息
    	types = GoodsType.objects.all()
    	# 获取首页轮播商品信息
    	goods_banners = IndexGoodsBanner.objects.all().order_by('index')
    	# 获取首页促销活动信息
    	promotion_banners = IndexPromotionBanner.objects.all().order_by('index')
    	# 获取首页分类商品展示信息,由于不同种类的商品展示信息存储在同一个表中,因此需要对其进行分类,并对每一个种类的商品信息进行查询
    	for type in types:
    		title_banners = IndexTypeGoodsBanner.objects.filter(types=type, display_type=0)
    		image_banners = IndexTypeGoodsBanner.objects.filter(types=type, display_type=1)
    		# 将获取到的每个种类的商品信息添加到种类的实例属性中,此中type是GoodType的实例,因此可以随意添加实例属性
    		type.title_banners = title_banners
    		type.image_banners = image_banners
    
    	# 组织模板上下文
    	context = {
    		'types': types,
    		'goods_banners': goods_banners,
    		'promotion_banners': promotion_banners,
    	}
    	# 加载模板文件
    	temp = loader.get_template('static_index.html')
    	# 渲染模板生成一个大字符串
    	static_index_html = temp.render(context)
    	# 生成文件,拼接路径
    	save_path = os.path.join(settings.BASE_DIR, 'index.html')
    	with open(save_path, 'w') as f:
    		f.write(static_index_html)
    

    在admin.py中重写Admin操作,并对所有在admin页面显示的模型类进行继承与注册,代码如下(即实现在admin操作时,重新生成静态文件页面):

    from django.contrib import admin
    from django.core.cache import cache
    from goods.models import GoodsType, GoodsSKU, GoodsSPU, GoodsImage, IndexGoodsBanner, IndexTypeGoodsBanner, IndexPromotionBanner
    
    class BaseModelAdmin(admin.ModelAdmin):
    	def save_model(self, request, obj, form, change):
    		'''在新增或修改模型类表时应用'''
    		super().save_model(request, obj, form, change)
    		from celery_tasks.tasks import generate_static_index_html
    		generate_static_index_html.delay()
    		# 删除缓存,由于view中缓存若不存在会生成,因此无需在此生成
    		cache.delete('index_page_data')
    
    	def delete_model(self, request, obj):
    		'''在删除模型类表中数据时使用'''
    		super().delete_model(request, obj)
    		from celery_tasks.tasks import generate_static_index_html
    		generate_static_index_html.delay()
    		# 删除缓存
    		cache.delete('index_page_data')
    
    class GoodsTypeAdmin(BaseModelAdmin):
    	pass
    
    class GoodsSKUAdmin(BaseModelAdmin):
    	pass
    
    class GoodsSPUAdmin(BaseModelAdmin):
    	pass
    
    class GoodsImageAdmin(BaseModelAdmin):
    	pass
    
    class IndexGoodsBannerAdmin(BaseModelAdmin):
    	pass
    
    class IndexTypeGoodsBannerAdmin(BaseModelAdmin):
    	pass
    
    class IndexPromotionBannerAdmin(BaseModelAdmin):
    	pass
    
    admin.site.register(GoodsType, GoodsTypeAdmin)
    admin.site.register(GoodsSKU, GoodsSKUAdmin)
    admin.site.register(GoodsSPU, GoodsSPUAdmin)
    admin.site.register(GoodsImage, GoodsImageAdmin)
    admin.site.register(IndexGoodsBanner, IndexGoodsBannerAdmin)
    admin.site.register(IndexTypeGoodsBanner, IndexTypeGoodsBannerAdmin)
    admin.site.register(IndexPromotionBanner, IndexPromotionBannerAdmin)
    

    实现②:在用户访问首页时判断有无缓存,若有则无需重新查询表,直接渲染模板,若无则生成,注意在上述admin中重写了后台更改数据时删除缓存,保证用户访问时可以及时的获取到更新。(关于Django缓存的使用见前文)

    :①在生成了静态页面之后,配置nginx,通过一定的调度手段,使用户去访问Nginx服务器从(celery服务器上)获取静态页面而非从Django服务器上获取首页(因此无法使用Django中的用户信息);
    ②调度的实现方法(后详):在Django和celery/nginx服务器前添加一个nginx服务器专用于调度(即只暴露给用户这个nginx调度服务器的IP,提高了安全性),可以在调度服务器中设置ip:port/去访问celery/nginx静态页面,ip:port/index去访问django服务器(例如让所有用户都先访问静态页面,具体的链接点击时会访问Django服务器判断是否需要缓存)。

    商品详情页的显示

    在商品详情页中需要的内容有:
    ①SKU商品的名称图片等信息,并同SPU的其他商品;
    ②显示商品种类和种类新品;
    ③商品评论(由于评论位于订单模型类中,因此此处简略);
    ④用户购物车数量及当用户登录时添加历史浏览记录;
    ⑤添加到购物车的页面变化及数据库操作(位于购物车模块);
    具体代码如下:

    class DetailView(View):
    	'''商品详情页面'''
    	def get(self, request, goods_id):
    		# 尝试获取ID
    		try:
    			sku = GoodsSKU.objects.get(id=goods_id)
    		except GoodsSKU.DoesNotExit:
    			# 所查商品不存在,返回一个页面
    			return redirect(reverse(' goods:index '))
    
    		# 获取商品的分类信息
    		types = GoodsType.objects.all()
    		# 获取商品的评论信息,[对评论内容进行筛选]
    		sku_orders = OrderGoods.objects.filter(sku=sku)
    		# 获取该种类新品,通过创建时间排序,并切片取前两个
    		new_skus = GoodsSKU.objects.filter(types=sku.types).order_by('-create_time')[:2]
    		# 获取同一个SPU其他规格的商品
    		same_spu_skus = GoodsSKU.objects.filter(spu=sku.spu).exclude(id=goods_id)
    
    		# 获取用户购物车中商品数量
    		user = request.user
    		# 判断用户已登录
    		if user.is_authenticated:
    			conn = get_redis_connection('default')
    			cart_key = 'cart_{}'.format(user.id)
    			cart_count = conn.hlen(cart_key)
    			# 添加历史浏览记录
    			history_key = 'history_{}'.format(user.id)
    			# 对历史浏览记录是否重复进行判断和移除
    			conn.lrem(history_key, 0, goods_id)
    			# 添加当前的商品ID
    			conn.lpush(history_key, goods_id)
    			# 设置只保存用户最新浏览的5条信息
    			conn.ltrim(history_key, 0, 4)
    		else:
    			cart_count = 0
    		# 此处应该设置登录后跳转回原链接
    
    		# 组织模板上下文
    		context = {
    			'sku': sku,
    			'types': types,
    			'sku_orders': sku_orders,
    			'new_skus': new_skus,
    			'cart_count': cart_count,
    			'same_spu_skus': same_spu_skus,
    		}
    
    		return render(request, 'detail.html', context)
    

    商品列表页的显示

    商品列表页中,需要注意的点有:
    ①使用url来传入具体的type_id和排序方式,设置url的格式为 ‘/list/种类ID/页码?sort=排序方式’;
    ②设置分页显示,并通过解析url获取页码和排序方式;
    ③获取种类新品和购物车数量;
    ④根据指定的要求对页码的显示进行处理;
    具体代码如下:

    class ListView(View):
    	'''列表页'''
    	def get(self, request, type_id, page):
    		try:
    			# 获取当前分类
    			type_current = GoodsType.objects.get(id=type_id)
    		except GoodsType.DoesNotExist:
    			# 种类不存在
    			return redirect(reverse('goods:index'))
    		# 获取商品的分类信息
    		types = GoodsType.objects.all()
    		# 获取排序的方式及当前分类的商品
    		# sort=default默认排序
    		# sort=price价格排序
    		# sort=hot人气/销量排序 
    		sort = request.GET.get('sort')
    		if sort == 'hot':
    			skus = GoodsSKU.objects.filter(types=type_current).order_by('-sales')
    		elif sort == 'price':
    			skus = GoodsSKU.objects.filter(types=type_current).order_by('price')
    		else:
    			sort = 'default'
    			skus = GoodsSKU.objects.filter(types=type_current).order_by('-id')
    
    		# 对数据进行分页
    		paginator = Paginator(skus, 2)
    		# 获取要求页码的内容
    		try:
    			page = int(page)
    		except Exception as e:
    			page = 1
    		# 判断页码是否超出
    		if page > paginator.num_pages:
    			page = 1
    
    		# 获取指定页码的内容
    		sku_page = paginator.page(page)
    		# 至多显示5个页码,显示当前页的前两页和后两页
    		# 1.页面小于5页,页面上显示所有页码
    		# 2.当前页是前3页,显示1-5页
    		# 3.当前页是后3页,显示后5页
    		# 4.其余:显示当前页的前两页和后两页
    		# 5.添加跳转到第几页和最后一页的按钮,后续实现
    		num_pages = paginator.num_pages
    		if num_pages <= 5:
    			pages = range(1, num_pages+1)
    		elif page <= 3:
    			pages = range(1, 6)
    		elif num_pages-page <= 2:
    			pages = range(num_pages-4, num_pages+1)
    		else:
    			pages = range(page-2, page+3)
    
    		# 获取该种类新品,通过创建时间排序,并切片取前两个
    		new_skus = GoodsSKU.objects.filter(types=type_current).order_by('-create_time')[:2]
    
    		# 获取用户购物车中商品数量
    		user = request.user
    		cart_count = 0
    		# 判断用户已登录
    		if user.is_authenticated:
    			conn = get_redis_connection('default')
    			cart_key = 'cart_{}'.format(user.id)
    			cart_count = conn.hlen(cart_key)
    		# 此参数用于改变页码时不改变排序方式,设计url
    		context = {
    			'type_current': type_current,
    			'types': types, 'skus': skus,
    			'new_skus': new_skus,
    			'cart_count': cart_count,
    			'sort': sort, 
    			'skus_page': sku_page,
    			'pages': pages,
    		}
    		return render(request, 'list.html', context)
    

    商品搜索

    搜索引擎的简介见前文,此处使用haystack搜索引擎,并使用jieba分词模块,在Django中配置如下:

    # 配置全文检索引擎的使用
    HAYSTACK_CONNECTIONS = {
        'default': {
            #使用whoosh引擎
            'ENGINE': 'haystack.backends.whoosh_cn_backend.WhooshEngine',
            #索引文件路径
            'PATH': os.path.join(BASE_DIR, 'whoosh_index'),
        }
    }
    
    #当添加、修改、删除数据时,自动生成索引
    HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
    

    并建立一个模板文件用于显示搜索结果,其传入模板的对象有:query:搜索关键字,page:自动分页后当前页内容,paginator:分页的paginator对象;其余具体配置过程比较固定,可参网上教程页或参具体代码,此处略。

    以上即商品模块的全部内容,完整代码见https://github.com/Icemelon99/test_project

    展开全文
  • 利用django框架完成的完整的电商平台 包括商品的商家 商家入驻 会员注册 手机验证 购物车加减 订单结算 模拟订单支付 四级联动地址的添加 python3.6环境下搭建 下载即可使用
  • 个人商城项目(django2)

    2019-04-11 16:09:55
    个人商城网站,有浏览商品,购买商品,购物车功能(没有付款接口,一切购买功能是模拟的)。验证登录功能和保持登录状态。
  • Django项目之Web端电商网站的实战开发(一)

    万次阅读 多人点赞 2019-03-25 21:31:08
    二丶电商项目开发流程 三丶项目需求 四丶项目架构概览 五丶项目数据库设计 六丶项目框架搭建 一丶项目介绍 产品:关于Web端的电商网站 商业模式:B2C模式企业对个人 设计模式:使用前后端不分离进行项目开发...

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家!

    项目源码下载

    目录

    一丶项目介绍

    二丶电商项目开发流程

    三丶项目需求

    四丶项目架构概览

    五丶项目数据库设计

    六丶项目框架搭建


    一丶项目介绍

    • 产品:关于Web端的电商网站
    • 商业模式:B2C模式 企业对个人
    • 设计模式:使用前后端不分离进行项目开发(后端控制前端的效果展示)

    前端效果展示

    二丶电商项目开发流程

    1.流程图

    2.1 前奏
        项目立项:公司BOSS决定做项目
        需求分析:分析客户的需求
        原型设计:产品经理画出产品原型图

    2.2 前端
        UI设计:使用PS等工具对产品进行界面设计
        前端设计:根据UI人员设计的图片,写成对应的前端页面

    2.3 后端
        架构设计:①模块划分,功能架构 ② 开发环境选择 ③其他技术 ④部署架构
        数据库设计:①分析数据表和表字段 ②表关系
        模块代码实现和单元测试:①后端开发人员进行分工开发 ②开发完成后给测试人员进行单元测试

    2.4 尾声
        代码整合:将后端代码与前端代码进行耦合合并
        集成测试:将整合后的代码再次进行测试
        网站发布:在生产环境进行上线

    三丶项目需求

    用户模块

    1. 注册页
        1.1 注册时校验用户名是否已被注册
        1.2 完成用户信息的注册
        1.3 给用户的注册邮箱发送邮件,用户点击邮件中的激活链接完成用户账户的激活
        1.4 城区的区域信息需动态加载

    2. 登录页
        2.1 实现用户的登录功能

    3. 用户中心
        3.1 用户中心信息页:显示登录用户的信息,包括用户名、电话和地址,同时页面下方显示出用户最近浏览的商品信息
        3.2 用户中心地址页:显示登录用户的默认收件地址,页面下方的表单可以新增用户的收货地址
        3.3 用户中心订单页:显示登录用户的订单信息
        3.4 用户可以选择城区、入住时间、离开时间等条件进行搜索

    4. 其他
        4.1 如果用户已经登录,页面顶部显示登录用户的信息

    商品相关

    1. 首页
        1.1 动态指定首页轮播商品信息
        1.2 动态指定首页活动信息
        1.3 动态获取商品的种类信息并显示
        1.4 动态指定首页显示的每个种类的商品(包括图片商品和文字商品)
        1.5 点击某一个商品时跳转到商品的详情页面

    2. 商品详情页
        2.1 显示出某个商品的详情信息
        2.2 页面的左下方显示出该种类商品的2个新品信息

    3. 商品列表页
        3.1 显示出某一个种类商品的列表数据,分页显示并支持按照默认、价格、和人气进行排序
        3.2 页面的左下方显示出该种类商品的2个新品信息

    4. 其他
        4.1 通过页面搜索框搜索商品信息

     购物车相关
        1 列表页和详情页将商品添加到购物车
        2 用户登录后,首页,详情页,列表页显示登录用户购物车中商品的数目 
        3 购物车页面:对用户购物车中商品的操作。如选择某件商品,增加或减少购物车中商品的数目

    订单相关
        1 提交订单页面:显示用户准备购买的商品信息
        2 点击提交订单完成订单的创建
        3 用户中心订单页显示用户的订单信息
        4 点击支付完成订单的支付

    四丶项目架构概览

    1.页面图

    2.功能图

    3. 部署图

    五丶项目数据库设计

    1.分析网站页面所需的参数

    注册页(register.html)
        ①用户名
        ②密码
        ③邮箱

    登录页(login.html)
        ①用户名
        ②密码

    用户中心页(user_center_site.html)
        ①收件人
        ②详细地址
        ③邮编
        ④联系方式

    商品详情页(detail.html)
        ①商品名称
        ②简介
        ③价格
        ④单位
        ⑤商品库存
        ⑥商品详情
        ⑦商品图片
        ⑧商品种类编号

    主页(index.html)
        ①商品种类名称 
        ②logo
        ③图片

    商品列表页(list.html)
        ①商品名称
        ②商品价格
        ③商品图片
        ④商品分类

    购物车页(cart.html)
        ①商品图片
        ②商品名称
        ③商品SKU(库存量单位)

    提交订单页(place_order.html)
        ①地址
        ②支付方式
        ③商品信息
        ④总金额
        ⑤运费
        ⑥商品信息

    用户订单页(user_center_order.html)
        ①订单编号
        ②支付状态
        ③订单创建时间

     2.将参数拆分到其所对应的表中

    用户表(df_user)
        ①主键ID
        ②用户名
        ③密码
        ④邮箱
        ⑤激活标识(是否激活邮箱)
        ⑥权限标识(普通用户和管理员)

    地址表(df_address)
        ①主键ID
        ②收件人
        ③收件地址
        ④邮编
        ⑤联系方式
        ⑥是否默认(默认收货地址)
        ⑦用户ID (外键)

    商品SKU表(df_goods_sku)
        ①主键ID
        ②商品名称
        ③简介
        ④价格
        ⑤单位
        ⑥库存
        ⑦销量
        ⑧图片(这个图片字段只存一张商品封面图)
        ⑨状态
        ⑩商品种类ID(外键)
        ⑪spu ID(外键)

    商品种类表(df_goods_type)
        ①主键ID
        ②种类名称
        ③logo
        ④图片

    主页幻灯片商品表(df_index_banner)
        ①主键ID
        ②sku ID (外键)
        ③图片
        ④index (图片索引值)

    主页促销活动表(df_index_promotion)
        ①主键ID
        ②图片
        ③活动url地址
        ④index(图片索引值)

    商品SPU表(df_goods)
        ①主键ID
        ②名称
        ③商品详情

    主页分类商品展示表(df_index_type_goods)
        ①主键ID
        ②sku ID (外键)
        ③种类ID
        ④展示标识
        ⑤index(图片索引值)

    商品图片表(df_goods_image)
        ①主键ID
        ②图片
        ③sku ID

    订单商品表(df_order_goods)
        ①主键ID
        ②订单ID (外键)
        ③sku ID (外键)
        ④商品数量
        ⑤商品价格
        ⑥评论

    订单信息表(df_order_info)
        ①主键ID
        ②订单ID (外键)
        ③用户ID (外键)
        ④支付方式
        ⑤总数量
        ⑥总金额
        ⑦运费
        ⑧支付状态
        ⑨创建时间

    六丶项目框架搭建

    说明:博主这里使用开发环境为Windows7+PyCharm

    1.在PyCharm中创建dailyfresh项目,然后再到终端中创建项目应用模块,如下图所示

    2. 在实际项目开发中应用比较多时,会在项目下创建一个名为apps的包,并将应用目录放在该apps下

    3.在配置文件settings中注册应用

    • step1 项目配置文件settings中导入sys模块,添加apps包到系统路径中,这样做的目的是在添加应用时不用写apps.应用名
    sys.path.insert(0, os.path.join(BASE_DIR, "apps"))
    • step2 注册刚创建出来的应用 
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'df_cart',
        'df_goods',
        'df_order',
        'df_user'
    ]

     4.在配置文件settings中配置mysql数据库

    • step1 在mysql中创建dailyfresh数据库
    create database dailyfresh charset=utf8;
    • step2 配置数据库 
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'dailyfresh',
            'USER': 'root',
            'PASSWORD': 'mysql',
            'HOST': 'localhost',
            'PORT': '3306',
        }
    }
    • step3 顺便设置语言和时区
    LANGUAGE_CODE = 'zh-hans'
    
    TIME_ZONE = 'Asia/Shanghai'

    5.在配置文件settings中配置静态文件目录

    • step1 在项目目录下创建static目录,用于存放前端静态文件

    • step2 在settings配置文件末端将static目录路径添加到系统路径中
    STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]
    • step3 将前端资源放到static目录下

    6.在根基urls.py文件设置正则匹配将应用模块中的urls包含进来

    • step1 在根基urls.py文件中进行如下编写,namespace表示反向解析
    urlpatterns = [
        url(r'^admin/', include(admin.site.urls)),
        url(r'^user/', include('df_user.urls', namespace='user')),  # 用户模块
        url(r'^cart/', include('df_cart.urls', namespace='cart')),  # 购物车模块
        url(r'^order/', include('df_order.urls', namespace='order')),  # 订单模块
        url(r'^', include('df_goods.urls', namespace='goods')),  # 商品模块
    ]
    • step2 在每个应用模块中创建urls.py文件,内容如下
    # coding:utf-8
    
    from django.conf.urls import url
    
    
    urlpatterns = [
       
    ]
    

    7.在项目目录下创建一个名为db的python包,在这个包下创建一个base_model.py文件,用作于基类完成数据库表共有字段

    • step1 创建base_model.py文件

    • step2 在base_model.py中进行如下编写
    # coding:utf-8
    from django.db import models
    
    
    class BaseModel(models.Model):
        """抽象模型基类"""
        create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
        update_time = models.DateTimeField(auto_now=True, verbose_name="更新时间")
        isDelete = models.BooleanField(default=False, verbose_name="删除标记")
    
        class Meta:
            # 表示为抽象模型类
            abstract = True

     8.在df_user模块中的models.py中定义两个模型类分别是用户模型类和地址模型类

    # -*- coding: utf-8 -*-
    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_default = models.BooleanField(default=False, verbose_name='是否默认')
    
        class Meta:
            db_table = 'df_address'
            verbose_name = '地址'
            verbose_name_plural = verbose_name

    9.在df_goods模块中的models.py中定义模型类

    • step1 在models.py中进行如下编写
    # -*- coding: utf-8 -*-
    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='商品类型图片')
    
        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='商品种类')
        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='商品状态')
    
        class Meta:
            db_table = 'df_goods_sku'
            verbose_name = '商品'
            verbose_name_plural = verbose_name
    
    
    class Goods(BaseModel):
        '''商品SPU模型类'''
        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='商品')
        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='商品')
        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='商品类型')
        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='展示顺序')
    
        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
    
    • step2 因为在df_goods模块中使用了第三方模块tinymce富文本编辑器所以需要在settings中进行添加应用
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'tinymce',
        'df_cart',
        'df_goods',
        'df_order',
        'df_user'
    ]
    • step3 在配置文件末尾添加编辑器的配置
    # 富文本编辑器配置
    TINYMCE_DEFAULT_CONFIG = {
        'theme': 'advanced',
        'width': 600,
        'height': 400,
    }
    • step4 在根基urls文件中配置编辑器url
    url(r'^tinymce/', include('tinymce.urls')),  # 富文本编辑器

    10.在df_order模块中的models.py中定义如下模型类

    # -*- coding: utf-8 -*-
    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('df_user.User', verbose_name='用户')
        addr = models.ForeignKey('df_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('df_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, verbose_name='评论')
    
        class Meta:
            db_table = 'df_order_goods'
            verbose_name = '订单商品'
            verbose_name_plural = verbose_name

    11. 在settings配置文件中使用django内置的认证系统指定的模型类为df_user下的User类

    # django认证系统指定的模型类
    AUTH_USER_MODEL = 'df_user.User'

    12.生成迁移文件

    13.执行迁移文件

    14.查看数据库

    15.运行项目

    展开全文
  • (坚持每一天,就是成功)Python Django Web框架,Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,模板T和视图V组成。安装Python 和 Django可以自己查阅资料 此文均在Pycharm下...

    1115722-20180706161730646-2088867166.png

    (坚持每一天,就是成功)

    Python Django Web框架,Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,模板T和视图V组成。

    安装Python 和 Django可以自己查阅资料 此文均在Pycharm下进行需要下载可加群:607021567找群主,本文主要介绍电商产品。所以可自行学习,创造自己的网站。

    1、Django架构设计:

    Django是一个基于MVC构造的框架。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式。它们各自的职责如下:

    层次

    职责

    模型(Model),即数据存取层

    处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。

    模板(Template),即业务逻辑层

    处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。

    视图(View),即表现层

    存取模型及调取恰当模板的相关逻辑。模型与模板的桥梁。

    2、工作机制:

    1115722-20180706162912789-371129029.png(这里的文件顺序或包含文件夹并不相同,我是为了介绍各个文件,所以拼接到一起。)

    1.用manage .py runserver 启动Django服务器时就载入了在同一目录下的settings .py。这里的settings.py文件内包含着数据库信息的设置,静态文件的设置,静态文件指(js,css,html,images)等,settings.py文件是我们django框架的核心文件之一。该文件包含了项目中的配置信息,如前面讲的URLConf等,其中最重要的配置就是ROOT_URLCONF,它告诉Django哪个Python模块应该用作本站的URLConf,默认的是urls .py。

    2.当访问url的时候,Django会根据ROOT_URLCONF的设置来装载URLConf。

    3.然后按顺序逐个匹配URLConf里的URLpatterns。如果找到则会调用相关联的视图函数(index.py),并把HttpRequest对象作为第一个参数(通常是request)(函数的参数是request)。

    4.最后该view函数负责返回一个HttpResponse对象(html网页)。

    这里的核心文件已经介绍完,剩下的文件可以在我们熟悉django框架后在认识,所以不一一介绍了!

    3、部署:

    Django可以运行在Apache,Nginx上,也可以运行在支持WSGI,FastCGI的服务器上。支持多种数据库,已经支持Postgresql,MySql, Sqlite3,Oracle。Google App Engine也支持Django的某些部分,国内支持的平台有(SAE)Sina App Engine,(BAE)百度应用引擎。

    4、管理文件夹

    接下来介绍核心文件夹,这里是分类清楚我们的文件该怎么去管理:

    1115722-20180706163443360-186691198.png

    (一)、这里的文件夹名字可以自己任意去命名,第一行是我们的django项目的主文件夹名字,默认主文件夹下可以自己创建自己的py文件的文件夹,不过pycharm自动创建了py文件的文件夹,命名规则是以主文件夹命名。

    (二)、第二行就是我们的py文件所在的文件夹,这些py文件主要是我们操作前端到后台所需要的。

    (三)、第三行为我们的静态文件目录包含———:Js、Css、Html、img、fonts等文件

    (四)、第四行主要是我们的Html模板文件目录,这里存放我们的主页,后台管理页的html文件。

    (五)、manage.py启动文件

    5、电商项目——产品数据,后台管理

    电商项目用户部分:主要分为三大类——1、用户浏览商品 ,2、购买商品 ,3、管理订单

    电商项目管理部分:主要也为三大类——1、商品数据整合网站 ,2、接受用户信息数据存入后台(注册和管理),2、处理用户订单问题

    分析到这里首先进行电商管理部分,商品数据整合——SqlServer + Django:

    首先我们需要创建连接数据库py文件——dataas.py:

    1 classoneic_settings:2 MSSQL_INFO = {"hostname":"xxx","username":"xxx","password":"xxx","dbname":"xx"}

    接下来创建对数据库详细操作的py文件——data_db.py:

    1 from dataas importoneic_settings2 defmssqlserver_conn_db():3 try:4 #strconn= 'DSN=test;uid='+oneic_settings.MSSQL_INFO.get("username")+';PWD='+oneic_settings.MSSQL_INFO.get("password")

    5 strconn= 'DRIVER={SQL Server};SERVER='+oneic_settings.MSSQL_INFO.get("hostname")+';DATABASE='+oneic_settings.MSSQL_INFO.get("dbname")+';UID='+oneic_settings.MSSQL_INFO.get("username")+';PWD='+oneic_settings.MSSQL_INFO.get("password")6 db =pyodbc.connect(strconn)7 returndb8 exceptException,e:9 print e

    这里首先使用准备好的sql文件,就是我们的详细数据文件。

    6、电商项目——后台部分

    1、网站首页各个页面的html模板,这里的模板就是需要各位自己去创造了,这里需要储备前端的基础知识,包括:JS,CSS,HTML基础技能,也可直接下载现成的模板。

    2、管理静态文件——settings.py:

    1 TEMPLATE_DIRS =(2 'E:/Oneic_new/Oneic_new',3 #Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".

    4 #Always use forward slashes, even on Windows.

    5 #Don't forget to use absolute paths, not relative paths.

    6 )7 STATIC_URL = 'E:/Oneic_new/static/'

    8 STATIC_ROOT = 'E:/Oneic_new/static/'

    9

    10 TEMPLATE_DIRS = (os.path.join(BASE_DIR, 'templates'),)

    这里主要修改STATIC_URL 和 STATIC_ROOT文件。

    3、策划url.py文件——控制网页首页显示:

    1 from django.conf importsettings2 (r'^static/(?P.*)$','django.views.static.serve',{'document_root':settings.STATIC_ROOT}),3 url(r'^admin/', include(admin.site.urls)),4 url(r'$','Oneic_new.index.new_html')

    这写代码除了3行,剩余是我需要添加的代码,第2行就是静态文件的部署,4行是django所要找到url的位置。

    4、处理数据传入操作——index.py:

    1 importcommon2 importsms3 from uc importgetShopCart,checkLogin4 defbasicinfo(request):5 logininfo =checkLogin(request)6 if logininfo and logininfo.get('loginuserid') != None and logininfo.get('loginuserid')!="":7 userdata={}8 if logininfo.get('usertype') == None or logininfo.get('usertype') == "" or logininfo.get('usertype') == "0":9 return HttpResponseRedirect('/selectType.html')10 mssql_conn =common.mssqlserver_conn_db()11 cs =mssql_conn.cursor()12 cs.execute("{call sp_member_Allinfo_get_py (?)}", logininfo.get('loginuserid'))13 q =cs.fetchone()14 cs.commit()15 if (q and len(q) >0):16 if q[0] !=0:17 userdata['mp'] = q[1]18 userdata['realname'] = q[2]19 userdata['corname'] = q[3]20 userdata['tel'] = q[4]21 userdata['fax'] = q[5]22 userdata['pos'] = q[6]23 userdata['userType'] = q[7]24 userdata['userLevel'] = q[8] if q[8] else ''

    25 userdata['userClass'] = q[9] if q[9] else ''

    26 userdata['province'] = q[10] if q[10] else ''

    27 userdata['city'] = q[11] if q[11] else ''

    28 userdata['district'] = q[12] if q[12] else ''

    29 userdata['address'] = q[13] if q[13] else ''

    30 userdata['RegTime'] = q[14].strftime('%Y-%m-%d %H:%M:%S') if q[14] else ''

    31 userdata['LastLoginTime'] = q[15].strftime('%Y-%m-%d %H:%M:%S') if q[15] else ''

    32 userdata['LastLoginIP'] = q[16] if q[16] else ''

    33 userdata['LoginCount'] = q[17] if q[17] != None else ''

    34 userdata['Email'] = q[18] if q[18] else ''

    35 userdata['lottery_num'] = q[19] if q[19] != None else036 userdata['integral_num'] = q[20] if q[20] != None else037 userdata['po_num'] = q[21] if q[21] != None else038 userdata['work_order_num'] = q[22] if q[22] != None else039 userdata['rfq_num'] = q[23] if q[23] != None else040 logininfo['userdata'] =userdata41 cs.close()42 mssql_conn.close()43 return render_to_response('index.html',logininfo)44 else:45 return HttpResponseRedirect('/signin')

    这里包含cookie检测:checkLogin.py文件——cookie检测。logininfo——为我们需要的数据就是要在网页中显示的数据。

    checkLogin.py:

    1 from django.conf importsettings2 #检测是否登录

    3 defcheckLogin(req):4 edition_id =settings.SESSION_CSSID5 eny_email = req.COOKIES.get(settings.SESSION_COOKIE_MAIL,'')6 eny_mp = req.COOKIES.get(settings.SESSION_COOKIE_MP,'')7 eny_userid = req.COOKIES.get(settings.SESSION_COOKIE_UID,'')8 eny_usertype = req.COOKIES.get(settings.SESSION_COOKIE_UTYPE,'')9

    10 cartlist =getShopCart(req)11 login_info = {"cartlist":cartlist,"cartnum":len(cartlist),"loginemail":"","loginuserid":"","loginmp":"","usertype":"","css_id":edition_id}12 if eny_email != "":13 login_info['loginemail'] =DES.decrypt(str(eny_email))14 ifeny_usertype:15 login_info['usertype'] =DES.decrypt(str(eny_usertype)) #DES为加密的py文件,可以自己随便写!16 if eny_userid != "":17 login_info['loginuserid'] =DES.decrypt(str(eny_userid))18 cartnum = getShoppcartNum(login_info.get('loginuserid'))19 login_info['cartnum'] =cartnum20 if eny_mp != "":21 mphone =DES.decrypt(str(eny_mp))22 enymp =[]23 mp=list(mphone)24 for i inrange(0,len(mp)):25 if i>2 and i<7:26 mp[i]=chr(42)27 enymp.append(mp[i])28 else:29 enymp.append(mp[i])30 eny_Mp = ''.join(enymp)31 login_info['loginmp'] =eny_Mp32 login_info['mp'] =DES.decrypt(str(eny_mp))33

    34 return login_info

    这里是后台基本完成的项目了之一!WEB的是需要一步一步去扩建,所以我只是介绍一下我们日常项目的简单介绍,如果又不太详细的可加群!

    7、电商项目——前端构造:

    这里JS,CSS我不去解释了,因为他们是前端的基础应用,其中与python密切结合的是html:

    所以我简单介绍一下在html文件中怎么去应用我们后台传入的数据:

    1、值传入:

    1、2、

    {{参数}

    这里的值与参数都是“ {{ 参数 }} ”两个大括号嵌入的。

    2、判断——可直接在html中写if else语句:

    1 {% if condition %}2 ... display3 {% endif %}4

    5 or6

    7 {% if condition1 %}8 ... display 19 {% elif condition2 %}10 ... display 211 {% else %}12 ... display 313 {% endif %}

    这里的用法和python文件中用法无异。

    3、嵌入网页:

    1 {% include 'template/footer.html' %}

    一定要写路径。

    至此,总体电商项目初入门介绍完毕,剩下的就是需要自己来创造其它的管理层页面。加油!之后也许继续会出多层次界面的介绍,请期待!

    展开全文
  • 自学 Python 过程中练习的电商项目, 商品数据及图片从电商网站爬的。可参考 -> 主要功能: 账号注册、登录等功能。 首页轮播图、商品类别、热销商品。 商品列表、搜索商品。 我的订单、收货地址、最近浏览。 添加...
  • 整个项目基于django框架的website,是一个电商项目,功能齐全,用户注册登录缓存放在redis,用户信息商品信息等放于mysql,使用搜索引擎框架实现搜索功能,增加其他功能,如分页,乐观锁,分布式存储等优化功能,...
  • Django综合实战,从0打造一个模块完整、功能完善、达到上线标准的在线教育平台,全面掌握Django的同时,得到一套完整的代码,把真实的“部署上线”给你讲透,没经验的同学有福了! 用Python第一大网络框架 Django ...

    Django综合实战,从0打造一个模块完整、功能完善、达到上线标准的在线教育平台,全面掌握Django的同时,得到一套完整的代码,把真实的“部署上线”给你讲透,没经验的同学有福了!

        用Python第一大网络框架 Django 制作符合潮流的接口开发?这门课很有针对性!使用Django 最完备、使用率最高的 Django REST framework,讲解内容相当详实。另外还有良心第三方登录、支付宝支付、可浏览化API文档,sentry错误日志配置诸多好内容

    全套视频讲解加代码:链接:https://pan.baidu.com/s/185nBx-ujfgXDCr7t3Pqwqw

    提取码:k1m6

    展开全文
  • Django商店 商城项目
  • ​download:Vue+Django独立开发电商项目 修改luffy/settings/prop.py中以下几项 (1) allow_hosts 1 2 3 ALLOWED_HOSTS = [  ‘api.youdomain.com’, ] (2) 跨域白名单 1 2 3 4 5 6 CORS_ORIGIN_WHITELIST = (  # ...
  • django电商项目

    2019-09-02 17:58:00
    创建项目 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 初始化 ...
  • Django项目之Web端电商网站的实战开发(完结)

    万次阅读 多人点赞 2019-04-11 14:15:01
    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! ... 目录 一丶订单生成 ...四丶项目部署 五丶项目总结 一丶订单生成 1.显示订单提交页面 step1 在df_order/views中定义类视...
  • 由于Django本身没有发送短信的功能,所以,我们使用第三方平台——容联云平台,完成短信功能的封装。 from ronglian_sms_sdk import SmsSDK import json accId = '8a216da879c0854b0179c2767c06010c' accToken = '...
  • 如何管理源代码 2. 数据库设计 数据库表的设计至关重要 根据项目需求,设计合适的数据库表 数据库表在前期如果设计不合理,后期随需求增加会变得难以维护 3. 集成测试:在测试阶段要留意测试反馈平台的bug报告 ...
  • 官方文档目前首推的是使用 Docker启动服务,这样显然更为简单,本文还尝试分别在服务器上以源代码方式安装启动服务。就目前来看,可以考虑的部署方式是后端使用 Docker 打包镜像部署,只需对官方的 Dockerfile 进行...
  • 使用Python Django开发web应用配套的示例代码 python3.6 django2.0。讲义第三页链接https://blog.csdn.net/jxzdsw/article/details/99312523。只是一个简单的blog系统的例子。我是想找到一个分享平台,并不想收取C币...
  • 完整版Python-Django项目,调试通过,直接下载即可运行包括:登陆、注册、浏览、搜索、发布资源、评论等多个功能。可作为新手练习,课程设计,毕业设计,代码注释详细,便于理解。
  • Python Django框架下做电商项目

    千次阅读 2018-10-10 20:18:38
    这个项目是在Linux 环境下做的,需要安装的有 ubuntu、pycharm、 pycharm如果没有激活的可以使用-----pycharm 最新激活码激活可用 ...在虚拟环境下搭建django框架 用pycharm创建项目并配置 ...
  • Django REST framework 技能5. 开发中常见的问题6. 开发中常见问题的解决方案7. Django 进阶知识点8. vue 知识点9. 章节安排10. 技术储备要求11. 系统功能 1. 开发环境 开发工具: Pycharm 开发环境: Python3.6+...
  • 1-1 课程导学 2-1 Pycharm的安装和简单使用 2-2 MySQL和Navicat的安装和使用 2-3 Windows和Linux下安装Python2和Python3 ...3-1 项目初始化 3-2 User Model设计 3-3 Goods Model设计 3-4 Trade...
  • 本项目替换原项目框架django1.8为最新版的django2.2.5(已修复为2.2.10),该项目包含了实际开发中的电商项目中大部分的功能开发和知识点实践, 是一个非常不错的django学习项目,同时也记录在替换框架中遇到的坑,...
  • 本资源基于django2.0 以上手机销售网站,有任何问题可以留言咨询。
  • 3.Django REST Framework的功能实现和核心源码分析 4.Sentry完成上线系统的错误日志的监控和警告 5.第三方登录和支付宝支付的集成 6.本地调试远程服务器代码技巧 课程系统构成: 1.vue前段项目 2.django r.....
  • django项目(天天生鲜电商项目

    万次阅读 多人点赞 2017-12-25 20:34:33
    第一步:建立数据库1:修改settings数据库设置 DATABASES = { 'default': { ... 'ENGINE': 'django.db.backends.mysql', 'HOST':'LOCALHOST', 'PORT':'3306', 'USER':'root', 'PASSWORD':'mys

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,070
精华内容 428
关键字:

django电商项目源码