首页 > 其他分享 >Django增删改查

Django增删改查

时间:2022-12-22 14:14:21浏览次数:34  
标签:goods name img 改查 id request Django 增删 page

增删改查。配置对应路由,函数,视图。报错注意看控制台。
添加取到前台传来的参数,后端给予验证。入库

编辑,取到当前编辑得id,在后台查到对应数据。重新update

删除,取到当前点击ID,后台delete

添加

views.py

#添加数据
class Index(APIView):

    def get(self, request):
        return render(request,'addgoods.html')
    #POST接受添加数据
    def post(self,request):
        mes={}
        name = request.data.get('name')
        price = request.data.get('price')
        img = request.FILES.get('img')
        # print(name,price,img)
        if not all([name,price,img]):
            mes['code'] = 250
            mes['message'] = '全要输入~'
        else:
            #写入图片
            img_name = img.name
            f = open(os.path.join(settings.UPLOAD_FILE, img_name), 'wb')
            for i in img.chunks():
                f.write(i)
            f.close()
            # 添加图库
            goods = Goods(name=name, price=price, img='/upload/' + img_name)
            goods.save()
            mes['code'] = 200
            mes['message'] = '添加成功'
            # goods = Goods.objects.all()
            # print(goods)
            return redirect('/api/goods')
        return render(request,'index.html',locals())

addgoods.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>添加商品</title>
</head>
<body>


<form method="post" enctype="multipart/form-data">

    名称: <input type="text" name='name' value="" width=100><br>
    价格: <input type="text" name='price' value="" width=100><br>
    图片: <input type="file" name='img' value="" width=100><br>
    确定: <input type="submit" value="确定">

</form>

</body>
</html>

删除

view.py

# 删除商品
class Pop_goods(APIView):
    # get获取数据删除
    def get(self,request):
        mes={}
        id = request.GET.get('id')
        # print(id)
        # 删除
        try:
            goods = Goods.objects.filter(id=id).delete()
        except:
            goods ={}
          # 返回
        mes['code']=200
        mes['message']= '删除成功'
        goods = Goods.objects.all()
        return render(request, 'goodslist.html', locals())

del.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<table border="1">
                <tr>
                    <th>序号</th>
                    <th>商品名称</th>
                    <th>价格</th>
                    <th>图片</th>
                    <th>删除</th>
                    <th>编辑</th>
                    <th>添加</th>
                </tr>

    {#使用for循环拿到当前页面上的所有数据对象(for循环中的c_page相当于c_page.object_list)#}
                {% for i in c_page %}
                <tr>
                    <td>{{i.id}}</td>
                    <td>{{i.name}}</td>
                    <td>{{i.price}}</td>
                    <td><img src="{{i.img}}" width="150" height="100"></td>
                    <td> <a href="/api/del/?id={{i.id}}" class="delete">删除</a></td>
                    <td> <a href="/api/edit/?id={{i.id}}" class="edit">修改</a></td>
                    <td><a href="/api/index/">添加</a></td>


                </tr>
                {% endfor %}


</table>

{#    要实现的效果#}
{#    上一页  1  2  3  下一页#}




{# 0、实现上一页 #}
    {# 若有上一页,则拿到上一页的页码超链接 #}
    {% if c_page.has_previous %}
        <a href="/api/goods?page={{ c_page.previous_page_number }}">上一页</a>

        {# 若没有上一页,则显示为普通的字符即可 #}
    {% else %}
        上一页
    {% endif %}

{# 1、实现中间部分 #}
    {#使用循环拿到每个页面#}
    {% for p_num in paginator.page_range %}
        {#若是当前页,则显示为普通的一个数字#}
        {% if p_num == c_page_number %}
            {{ p_num }}
            {# 若不是当前页面,则显示为一个超链接 #}
        {% else  %}
            <a href="/api/goods?page={{ p_num }}">{{ p_num }}</a>

        {% endif %}

    {% endfor %}

{# 2、实现下一页 #}
    {# 若有下一页,则拿到下一页的页码超链接 #}
    {% if c_page.has_next %}
        <a href="/api/goods?page={{ c_page.next_page_number }}">下一页</a>

        {# 若没有下一页,则显示为普通的字符即可 #}
    {% else %}
        下一页
    {% endif %}

</body>
</html>

编辑

views.py

# 修改商品
class Change_goods(APIView):

    def get(self,request):
        id = request.GET.get('id')
        goods = Goods.objects.filter(id=id)

        return render(request, 'index.html', locals())
    # 根据id获取数据
    def post(self,request):
        mes={}
        id = request.GET.get('id')
        print(id,'获取的编辑id')

        name = request.data.get('name')
        price = request.data.get('price')
        img = request.FILES.get('img')
        # print(id,name,price,img)
         # 写入图片
        img_name = img.name
        f = open(os.path.join(settings.UPLOAD_FILE,img_name),'wb')
        for i in img.chunks():
            f.write(i)
        f.close()
        # 获取数据
        goods = Goods.objects.filter(id=id).first()
        goods.name=name
        goods.price=price
        goods.img='/upload/'+img_name
        goods.save()
        # 返回
        mes['code']=200
        mes['message']='修改成功'
        return redirect('/api/goods')


edit.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
<h1>花满楼</h1>



<form method="post" enctype="multipart/form-data">
      {% for i in goods %}
    名称: <input type="text" name='name' value="{{i.name}}" width=100><br>
    价格: <input type="text" name='price' value="{{i.price}}" width=100><br>
    图片: <input type="file" name='img' value="" width=100><br>
    确定: <input type="submit" value="确定">
    {% endfor %}
</form>

{{mes}}



</body>
</html>

分页

views.py

from django.core.paginator import Paginator

#展示
class Goods_list(View):
    def get(self, request):
        page_num = request.GET.get('page', 1)

        # all_data = ['a']
        goods = Goods.objects.all()
        # 1、初始化paginator
        # 传入的参数(要分页的数据,每页要显示的数据条数)
        paginator = Paginator(goods, 2)

        # 2、初始化具体页码对应的page对象
        c_page = paginator.page(int(page_num))

        # 3、将值传入模板
        return render(request, 'goodslist.html', locals())

fenye.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<table border="1">
                <tr>
                    <th>序号</th>
                    <th>商品名称</th>
                    <th>价格</th>
                    <th>图片</th>
                    <th>删除</th>
                    <th>编辑</th>
                    <th>添加</th>
                </tr>

    {#使用for循环拿到当前页面上的所有数据对象(for循环中的c_page相当于c_page.object_list)#}
                {% for i in c_page %}
                <tr>
                    <td>{{i.id}}</td>
                    <td>{{i.name}}</td>
                    <td>{{i.price}}</td>
                    <td><img src="{{i.img}}" width="150" height="100"></td>
                    <td> <a href="/api/del/?id={{i.id}}" class="delete">删除</a></td>
                    <td> <a href="/api/edit/?id={{i.id}}" class="edit">修改</a></td>
                    <td><a href="/api/index/">添加</a></td>


                </tr>
                {% endfor %}


</table>

{#    要实现的效果#}
{#    上一页  1  2  3  下一页#}




{# 0、实现上一页 #}
    {# 若有上一页,则拿到上一页的页码超链接 #}
    {% if c_page.has_previous %}
        <a href="/api/goods?page={{ c_page.previous_page_number }}">上一页</a>

        {# 若没有上一页,则显示为普通的字符即可 #}
    {% else %}
        上一页
    {% endif %}

{# 1、实现中间部分 #}
    {#使用循环拿到每个页面#}
    {% for p_num in paginator.page_range %}
        {#若是当前页,则显示为普通的一个数字#}
        {% if p_num == c_page_number %}
            {{ p_num }}
            {# 若不是当前页面,则显示为一个超链接 #}
        {% else  %}
            <a href="/api/goods?page={{ p_num }}">{{ p_num }}</a>

        {% endif %}

    {% endfor %}

{# 2、实现下一页 #}
    {# 若有下一页,则拿到下一页的页码超链接 #}
    {% if c_page.has_next %}
        <a href="/api/goods?page={{ c_page.next_page_number }}">下一页</a>

        {# 若没有下一页,则显示为普通的字符即可 #}
    {% else %}
        下一页
    {% endif %}

</body>
</html>

标签:goods,name,img,改查,id,request,Django,增删,page
From: https://www.cnblogs.com/djl-0628/p/16998525.html

相关文章