快来用Django优雅的写个购物车界面在学妹面前装一下

相信大家大学的时候都写过商城网站的作业,而商城类网站最复杂最困难的那就是购物车无疑了,今天我就给大家分享一个简单的Django购物车代码
1.中间页:
一个购物车肯定都应该有一个中间页的
views.py):

def carJump(request, goods_id): #
    # 1.先获取前端页面上提交过来的数据
    user_id = request.COOKIES.get('user_id')
    #print(user_id)
    goods_obj = Goods.objects.get(id=int(user_id)) #获取数据库ID
    count = request.POST.get('count')  # 商品数量
    goods_img_path = request.POST.get('goods_img')  # 图片路径
    # 2.保存数据,如果之前已经购买了此商品则数量增加,如果没有买就保存数据。
    buy_car = BuyCar.objects.filter(goods_id=int(goods_id),user_id=int(user_id)).first()  # 如果没有则返回None
    # buy_car = BuyCar.objects.filter(goods_id=int(goods_id)).first()  # 如果使用 索引,不存在报错

    if buy_car:
        """如果数据库购物车表有此商品"""
        buy_car.goods_num += int(count)  # 当前数量增加, 注意 count 是字符串类型的。

    else:
        """数据库中没有此商品"""
        buy_car = BuyCar()    #与数据库建立连接,将获取来的信息存入数据库
        buy_car.goods_id = goods_id
        buy_car.goods_num = int(count)
        buy_car.goods_name = goods_obj.goods_name
        buy_car.goods_price = goods_obj.goods_now_price
        buy_car.goods_picture = goods_img_path
        buy_car.user = Buyer.objects.get(id=request.COOKIES.get('user_id'))

    buy_car.save()    #保存
    all_price = int(count) * float(buy_car.goods_price) #算出商品总价

    return render(request, 'buyer/buyCar_jump.html', locals())

(html):

 <div class="cart_list">
        <div class="cart_top">{{ buy_car.goods_name }}已经成功添加到购物车</div>
	        <div class="cart_listbox">
	            <table width="100%" cellpadding="0" cellspacing="0" border='0px'>
	                <tr>
	                    <th width='10%'>商品名称</th>
	                    <th width='20%'>商品缩略图</th>
	                    <th width='20%'>商品单价</th>
	                    <th width='20%'>商品数量</th>
	                    <th width='20%'>商品小计</th>
	                </tr>
	
	                <form method="post">
	                    <tr>
	                        <td><a href="#">{{ buy_car.goods_name }}</a></td>
	                        <td><a href="#"><img src="{{ buy_car.goods_picture }}"/></a></td>
	                        <td>¥{{ buy_car.goods_price }}元</td>
	                        <td>{{ count }}</td>
	                        <td>¥{{ all_price }}</td>
	                </form>
	                </tr>
	
	            </table>
	
	            <br>
	            <div>
	                <a class="btn" href="/buyer/goods_details/?id={{ goods_id }}">返回详情页</a>
	                {#需要判断当前用户是否登录#}
	                <a class="btn" href="/buyer/car_list/">去购物车结算</a>
	                 <a class="btn" href="/buyer/add_address/">添加收货地址</a>
	            </div>
	        </div>
	    </div>
    </div>

2.购物车页面:
views.py):

def car_list(request):
    # 将当前用户的所有数据查询出来。
    user_id = request.COOKIES.get('user_id')  
    goods_lst = BuyCar.objects.filter(user=user_id)  # 商品ID
    new_goods_lst = []  #  设一个列表[{},{},{}]
    for goods in goods_lst:  #循环套取此客户ID下的购物车商品
        all_price = float(goods.goods_price) * int(goods.goods_num)  # 每一个商品的总价
        new_goods_lst.append(
            {'all_price': all_price, 'goods': goods}  #添加到之前设的列表中,方便HTML页面套循环
        )

    # 查询当前用户所有的地址
    address_lst = Address.objects.filter(buyer=user_id)
    return render(request, 'buyer/car_list.html', locals())

	#删除购物车中某一商品
def delete_goods(request, goods_id): #页面中点击删除goods_id商品ID号
    user_id = request.COOKIES.get('user_id')  
    BuyCar.objects.get(goods_id=goods_id, user=int(user_id)).delete()  #确认客户ID 和商品ID 删除
    return redirect('/buyer/car_list/')  #重定向此页面

# 清空购物车
def clear_goods(request):
    user_id = request.COOKIES.get('user_id')
    BuyCar.objects.filter(user=int(user_id)).delete() #删除此用户ID 下的所有商品
    return redirect('/buyer/car_list/')

(html):

<form action="/buyer/enter_order/" method="post">
            {% csrf_token %}
            <div class="cart_listbox">
                <table width="100%" cellpadding="0" cellspacing="0" border='0px'>
                    <thead>
                    <tr>
                        <th width='10%'>
                            <input type="checkbox" id="all"
                                   style="margin-top: 20px; margin-left: 10px;width: 24px; height: 24px;">
                        </th>
                        <th width='10%'>商品名称</th>
                        <th width='20%'>商品缩略图</th>
                        <th width='20%'>商品单价</th>
                        <th width='20%'>商品数量</th>
                        <th width='20%'>商品小计</th>
                        <th width='10%'>操作</th>
                    </tr>
                    </thead>
                    <tbody id="j_tb">
                    {% if new_goods_lst %}
                        {% for data in new_goods_lst %}
                            <tr>
                                <td>{#name_1,name_2 #}
                                    <input name="name_{{ data.goods.id }}" value="{{ data.goods.id }}" type="checkbox"
                                           style="margin-left: 60px; width: 24px; height: 24px;">
                                </td>
                                {#                                商品名称#}
                                <td><a href="#">{{ data.goods.goods_name }}</a></td>
                                {#                             缩略图   #}
                                <td><a href="#"><img src="{{ data.goods.goods_picture }}"/></a></td>
                                {#                          单价   #}
                                <td>¥{{ data.goods.goods_price }}元</td>
                                <td><input type="submit" name="-" value="-" class="btn1" formaction=""/>
                                    {#                                    商品数量#}
                                    <input type="text" value="{{ data.goods.goods_num }}" name="count" class="text1"/>
                                    <input type="submit" name="+" value="+" class="btn1" formaction=""/></td>
                                {#                                总价格#}
                                <td>¥{{ data.all_price }}</td>
                                <td><a href="/buyer/delete_goods/{{ data.goods.goods_id }}/">删除</a></td>
                            </tr>
                        {% endfor %}
                    {% else %}
                        <tr>
                            <td colspan="6" style="text-align: center;">购物车空空如也~~,请快去购物吧!</td>
                        </tr>
                    {% endif %}
                    </tbody>
                </table>
            </div>
            <div class="shouhuo">
                <div class="shouhuo_top">收货信息</div>
                <label>收货地址:</label>
                <select name="address" id="" class="input">
                    {% for add in address_lst %}  #for 循环套取此ID下的收货地址
                        <option value="{{ add.id }}" class="input">{{ add.recver }}---{{ add.address }}</option>
                    {% endfor %}
                </select>
                <label>支付方式:</label>
                <select name="pay_Method" id="" class="input">
                    <option value="zfb" class="input">支付宝</option>
                    <option value="wx" class="input">微信</option>
                    <option value="bank" class="input">银行卡</option>
                </select>
            </div>
            <div class="goon">
                <div class="clearcart">
                    <a href="/buyer/clear_goods/" class="btn">清空购物车</a>
                </div>
                <div class="totalprice">
                    总计100元
                </div>
                <div class="order">
                    <input type="submit" value="立即下单" class="btn"/>
                </div>
            </div>
        </form>

中间的urls我就不写啦,各位加油!事业顺利!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
可以的,Python Django 提供了完整的认证系统,可以方便地实现用户登录功能。下面是一个简单的登录界面的实现: 1. 创建 Django 项目和应用程序 首先,需要创建一个 Django 项目和应用程序,可以通过以下命令完成: ``` django-admin startproject myproject cd myproject python manage.py startapp myapp ``` 将 `myapp` 添加到 `myproject/settings.py` 中的 `INSTALLED_APPS` 列表。 2. 创建用户认证视图和模板 在 `myapp/views.py` 中定义一个名为 `login_view` 的视图,该视图显示登录表单并提供用户身份验证。 ``` from django.contrib.auth import authenticate, login from django.http import HttpResponse from django.shortcuts import render def login_view(request): if request.method == 'POST': username = request.POST['username'] password = request.POST['password'] user = authenticate(request, username=username, password=password) if user is not None: login(request, user) return HttpResponse('Successfully logged in') else: return HttpResponse('Invalid login credentials') else: return render(request, 'login.html') ``` 在 `myapp/templates` 目录下创建一个名为 `login.html` 的模板文件,用于显示登录表单。 ``` {% extends 'base.html' %} {% block content %} <div class="container"> <div class="row"> <div class="col-md-6 offset-md-3"> <form method="post"> {% csrf_token %} <div class="form-group"> <label for="exampleInputEmail1">Email address</label> <input type="email" class="form-control" name="username" id="exampleInputEmail1" aria-describedby="emailHelp" placeholder="Enter email"> <small id="emailHelp" class="form-text text-muted">We'll never share your email with anyone else.</small> </div> <div class="form-group"> <label for="exampleInputPassword1">Password</label> <input type="password" class="form-control" name="password" id="exampleInputPassword1" placeholder="Password"> </div> <button type="submit" class="btn btn-primary">Submit</button> </form> </div> </div> </div> {% endblock %} ``` 3. 添加 URL 规则 在 `myapp/urls.py` 中定义 URL 规则,以便 Django 可以找到 `login_view` 视图。 ``` from django.urls import path from . import views urlpatterns = [ path('login/', views.login_view, name='login'), ] ``` 在 `myproject/urls.py` 中添加嵌套 URL 规则,以便访问 `myapp` 应用程序的 URL。 ``` from django.urls import include, path urlpatterns = [ path('', include('myapp.urls')), ] ``` 4. 运行应用程序 最后,启动 Django 开发服务器,测试登录视图是否正常工作。 ``` python manage.py runserver ``` 在浏览器中访问 `http://localhost:8000/login/`,应该看到一个带有登录表单的页面。填写表单并点击“登录”按钮,如果输入的用户名和密码正确,则应该收到“成功登录”的消息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值