Django第一个项目E-shopping cart记录
目录Contents
这不是一个教学文章,只是我个人项目的一个问题记录。
这是我学习Django大概3-4天来做的一个项目,因为第一次使用有很多地方不大懂,需要markdown something。
我使用的IDE是eclipse,python3的版本,mysql 8.0.11
1.创建一个Django的Project
做这个项目首先必须知道如何create 一个 Django project。
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