项目E-shopping cart记录

本文记录了作者学习Django 3 - 4天所做项目的相关内容,包括创建Django项目、设置项目(如链接app、配置settings、编写views和urls、配置数据库),还分享了编码中遇到的问题及解决办法,如网页Forbidden错误、ORM框架CRUD、models迁移等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录Contents

这不是一个教学文章,只是我个人项目的一个问题记录。
这是我学习Django大概3-4天来做的一个项目,因为第一次使用有很多地方不大懂,需要markdown something。
我使用的IDE是eclipse,python3的版本,mysql 8.0.11

1.创建一个Django的Project

做这个项目首先必须知道如何create 一个 Django project。

**全新的界面设计** ,将会带来全新的写作体验;
**1. 建立一个PROJECT,此处简单用图掠过,一直下一步,最后finish**
在这里插入图片描述
在这里插入图片描述
2. 右键新建的Project,然后Django→Create application,之后按照提示一路下来就会出现你创建的myapp

在这里插入图片描述
3.这是创建好的整个项目架构,大概是这样
在这里插入图片描述

2.设置Django项目

1.settings

1.第一步就是要链接到你自己的app上。到settings中,设置INSTALLED_APPS,如图设置你的html文件夹templates路径,这样才能找到你的HTML文件设置数据库以及设置一些其他文件夹的DIR后面会方便使用


在这里插入图片描述在这里插入图片描述在这里插入图片描述

2.写views以及使用urls编写路径,这个时候应该已经可以访问到页面了

3.数据库

在这里插入图片描述

基本上整个架构已经完成,开始coding部分!

3.coding中的Problems&Solutions

网页出现Forbidden错误

解决办法:方法1:在VIEWS中导包,then add label @csrf_exempt 在方法前

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def pay(request):
	return render(request, "pay.html",locals())

方法2:在html上输入{%csrf_token%}

<form method="post">
	 {%csrf_token%}
			<input type="text" name="username">
			<input type="text" name="password">
		<input type="submit">
	</form>

个人更喜欢方法1

ORM框架的CRUD(增删改查)

要导入上面我在models里创建的两个class

filter顾名思义是过滤器,所以参数填写条件就行。例如下面几个例子,分别展示了增删改查,感觉好像比打原生的sql语句快捷方便。

from myapp.models import Products,Cart
sql=Cart.objects.filter(id=2).update(count="3")#update cart set count="3" where id=2;
sql=Cart.objects.filter(id=3).delete()#delete from cart where id=3;
cart=Cart.objects.filter(status="0")#select * from cart where status="0";
product = Products.objects.get(id=2)#select * from products where id=2;
sql=Cart.objects.create(pid=id,count="1",status="0")#insert into cart values(pid=id,count="1",status="0");
sql.save()#记得要save才算提交,只有create需要

值得注意的是get() 返回的只能是一条数据,如果没值或者多值就会报错,所以在判断是否成功get的话,我是使用了try&except方法来进行逻辑判断。个人偏爱filter()更方便吧。

try:
    c=Cart.objects.get(pid=id,status="0")#当这个get报错则进入except,有一条记录则继续执行
    new_count=int(c.count)+1
    sql=Cart.objects.filter(pid=id).update(count=new_count)
except:
    sql=Cart.objects.create(pid=id,count="1",status="0")
    sql.save()

models的migrations

第一次更新或者更改后需要迁移才能有效使用,使用cmd进入到工程下输入两行代码即可。
每次有改动都要执行一次,我是会直接删除之前的文件后直接创建新的出来。这应该算是models里设置的结构的一种更新,类似我们的对象类更新一样吧。

python manage.py makemigrations
python manage.py migrate

在这里插入图片描述

如何使用ajax实现提示框

function ajax(id){
 	    $.ajax({
 	        url:"http://127.0.0.1:8000/add2cart", //要跳转到views端的路径,做处理
 	        data:{'id':id},//传递的数据
 	        type:"get",//传递的方式
 	        async:false,//是否异步处理
 	        dataType:"text",//数据的类型
	 	   success:function(obj){//成功后的回调函数
	 			layui.use('layer', function () {//使用layui前端框架发出提示
				  layer.msg('添加购物车成功');
			    });
	 	    }
 	 })}

Django的views代码

def product(request):
    products = Products.objects.all()
    return render(request, "product.html",{'products':products})
    
@csrf_exempt      
def add2cart(request):
    id=request.GET['id']
    print("商品id="+id)
    try:
        c=Cart.objects.get(pid=id,status="0")
        new_count=int(c.count)+1
        sql=Cart.objects.filter(pid=id).update(count=new_count)
    except:
        sql=Cart.objects.create(pid=id,count="1",status="0")
        sql.save()
    return HttpResponse("Success")

MYSQL问题django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11

解决办法:
在该路径下找到base.py的文件进行修改,F:\Anaconda\envs\baseroot\Lib\site-packages\django\db\backends\mysql
两步解决。1.将下图的decode改成encode;2.将第二幅图中的代码屏蔽即可
在这里插入图片描述
在这里插入图片描述
参考文献:https://blog.youkuaiyun.com/qq_35304570/article/details/79674449

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值