文章目录
Web开发 ------ 基于Django+Vue网上购物商城:项目细节完善
完整项目地址:https://gitee.com/dadadaliuliuliiu/ShopProject
一、支付宝API接口 报错:
1.报错:连接不上[2020/4/2 19:36] Upload to shop failed: could not resolve file “sftp://47.105.62.144/”. (Exhausted available authentication methods)
解决:
顶行tools–>development–>configuration–>里面有两个,一个是应用shop,一个是ip47.105.62.144,进行检测Test_Connection,我的是密码不对
2.报错说函数中没有某个方法,点进函数查看,方法是否更新,更改方法名。
3.[Errno 2] No such file or directory: ‘/data/www/ShopProject/app/trade/keys/private_daliu.txt’
原因:可能是写的代码文件没有上传服务器,这里的文件是我从文件夹中直接建立的目录,所以可能不会自动上传。
解决:在pycharm的目录中找到报错文件,右击文件点development–>upload to shop,在运行
4. File “/data/www/ShopProject/app/trade/serializers.py”, line 116, in get_alipay_url
return_url=“http://47.105.62.144:8000/alipay/return/”
ValueError: Not a valid PEM pre boundary
原因:Pycryptodome进行RSA签名,读取文件内的私钥和公钥出错,这里在应用私钥文件、应用公钥文件、支付宝公钥文件里面 内容前后要加上-----BEGIN PUBLIC KEY-----,-----END PUBLIC KEY-----(注意是五个-),我这里出错就是因为写了六个-。
5.问题:在代码没问题运行起来之后,浏览器端访问不了,显示无法访问此网站,可能时阿里云服务器的安全端口没有设置。
解决:登陆阿里云在实例安全组设置8000端口的安全规则,在运行。
二、项目细节完善
1.首页轮播图API接口实现
序列化
class BannerSerializer(serializers.ModelSerializer):
'''
轮播图
'''
class Meta:
model = Banner
fields = "__all__"
视图类
class BannerViewset(mixins.ListModelMixin, viewsets.GenericViewSet):
"""
首页轮播图
"""
queryset = Banner.objects.all().order_by("index")
serializer_class = BannerSerializer
url配置
# 配置首页轮播图的url
router.register(r'banners', BannerViewset, basename="banners")
测试
tools里面连接服务器后测试:
[root@todolist-server ~]# cd /data/www/ShopProject/
[root@todolist-server ShopProject]# ls
app manage.py
db.sqlite3 media
Django+Vue网上购物商城(七) 用户交易API接口.pdf requirements.txt
Django+Vue网上购物商城(九) 项目细节完善.pdf ShopProject
Django+Vue网上购物商城(八) 项目部署.pdf venv
doc
[root@todolist-server ShopProject]# source venv/bin/activate
(venv) [root@todolist-server ShopProject]# python manage.py runserver 0.0.0.0:8000
此时轮播图为空,去后台添加轮播图来测试
在查看banners信息,轮播图添加成功
报错
1.在首页轮播图API接口完善代码时,TypeError: str returned non-string (type ImageFieldFile)
原因:这里要返回一个图片的名称的字符串 不能是image对象
解决:去goods.models中,修改友好字符串的返回类型:images对象改为返回字符串:return self.image.name
2.如果访问不到可能是本地代码没有上传服务器,访问结果不对可能服务没有更新,需要重启一下服务
2.新品API接口实现
在设计Goods model时候有一个字段is_new, 实现这个接口只要在goods/filters/GoodsFilter里面添加一个过滤就可以了。
class GoodsFilter(django_filters.rest_framework.FilterSet):
'''
商品过滤的类
'''
class Meta:
model = Goods
# http://xxxx/goods/?price_min=10&price_max=100
fields = ['price_min', 'price_max','is_hot', 'is_new']
测试
在后台设置几个商品 is_new, 前台访问http://IP/goods进行过滤查看新品