视图类(函数视图,类视图,restful (drf)) 个人中心页的修改

一、视图类


1.函数视图写法


① 函数视图的定义及缺点


函数视图:以函数定义的视图,每个视图处理一个请求,一种类型的请求。

缺点:代码可读性较差。重复代码多


② 函数视图结构


视图:

from django.http import HttpResponse
from django.shortcuts import render
from django.shortcuts import render_to_response
def 函数名(request):
	//下面是模板的三种调用方法
	return HttpResponse("页面显示内容")
	return render("request,'1.html',locals()")
	return render_to_response("1.html",locals())

例子:
在这里插入图片描述
路由:
在这里插入图片描述
模板:一个html文件
在这里插入图片描述


2.类视图的写法(接口)


① 类视图的定义及优点


类视图:以类定义的视图,定义各种方法分别处理不同请求。
优点:可读性好,代码重复率低


② 类视图结构


视图:
在这里插入图片描述
路由:
在这里插入图片描述
可以通过View里的as_view方法来分派请求,
可分派请求如下

path('goodsview/', csrf_exempt(GoodsView.as_view())),

在这里插入图片描述


③ 接口(用来接收静态数据)


类视图中的函数返回的是JsonResponse
在这里插入图片描述
在这里插入图片描述
返回的是一个接口:接口 提供数据支持
return JsonResponse 没有页面有数据
render(request,“1.html”,locals())和有页面和数据的


④ 处理get请求


get请求一般用来查找数据
在这里插入图片描述
在这里插入图片描述


⑤ 处理post请求


post请求一般用来提交数据,增加数据
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


⑥ 实现put请求


put请求一般用来修改数据,更新数据
在这里插入图片描述

 def put(self,request):  ##处理put请求 用来修改数据  需要json.loads获取到值
        # data = request.body  bytes -->string decode()
        ## request.body获取的是bytes类型
        ## json.loads 需要一个string类型 bytes -->string decode()
        data = json.loads(request.body.decode())
        id = data.get("id")
        goodsname = data.get("goodsname")

        goods = self.obj.objects.get(id=id)
        goods.good_name = goodsname
        goods.save()

        self.result["data"] = {
            "id":id,
            "data":"商品名字更新成功"
        }
        return JsonResponse(self.result)

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


⑦ 处理delete请求


delete请求一般用来删除数据的

    def delete(self,request):  ##处理delete请求
        # 删除数据
        data = json.loads(request.body.decode())
        id = data.get("id")
        # 删除操作
        self.obj.objects.filter(id=id).delete()
        self.result["data"] = {
            "id": id,
            "data": "商品删除成功"
        }

        return JsonResponse(self.result)

和put一样,需要用到json.loads来获取数据,
所以都要导包

 import json

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


3.Django RESTful Framework(Django RESTful框架)


① restful的简介


restful: 接口的编写风格,设计风格 讲究: 资源
RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义
django为restful 提供了一些插件


② 安装的一些插件


pip install djangorestframework
pip install django-filter

③ 插件的配置 settings


django安装的插件是以app的形式存在的

restful类似于富文本 注册应用,

注册 跟注册子应用一样 注册
在这里插入图片描述
在这里插入图片描述


④ 视图


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


⑤ 过滤器


在这里插入图片描述


⑥ 路由


在这里插入图片描述


⑦ 添加增删改功能


在这里插入图片描述
postman 发送请求(写操作)
在这里插入图片描述
restful (drf)提供了增删改查的方法

查询(get)

  • 获取单条数据
    • 通过id
    • http://127.0.0.1:8000/API/goods/1/
  • 获取所有数据
    • http://127.0.0.1:8000/API/goods/

增加 post

  • http://127.0.0.1:8000/API/goods/
  • 需要携带参数

删除 delete

http://127.0.0.1:8000/API/goods/

修改 put

http://127.0.0.1:8000/API/goods/


⑧ api接口


  • 接口 提供数据的支持
  • 爬虫,
  • ajax 动静分离
  • 作用: 扩大了数据可用范围

二、个人中心页的修改


登录之后能够看到自己的用户信息

能够修改自己的用户信息


1.模板


{% extends "base.html" %}
{% block title %}
    个人中心
{% endblock %}
{% block content %}
    <form action="" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <table class="table">
        <tr>
            <td rowspan="3" style="width: 300px;">
                <img style="width: 300px;height:300px" src="/static/{{ user.photo }}" alt="">
                <input type="file" name="photo">
            </td>
            <th>邮箱</th>
            <td><input type="text" name = "email" value="{{ user.email }}" disabled></td>
            <th>用户名</th>
            <td><input type="text" name = "username" value="{{ user.username }}"></td>
        </tr>
        <tr>
            <th>手机号</th>
            <td><input type="text" name = "phone_number" value="{{ user.phone_number }}"></td>

            <th>年龄</th>
            <td><input type="text" name = "age" value="{{ user.age }}"></td>
        </tr>
        <tr>
            <th>性别</th>
            <td><input type="text" name = "gender" value="{{ user.gender }}"></td>
            <th>地址</th>
            <td><input type="text" name = "address" value="{{ user.address }}"></td>
        </tr>
        <tr>
            <td colspan="5" style="text-align: center">
                <input class = "btn btn-primary "type="submit" value="完善用户信息">
            </td>
        </tr>

    </table>
    </form>

{% endblock %}

2.视图

@LoginVaild
def personal_info(request):
    ##
    user_id = request.COOKIES.get("userid")
    print (user_id)
    user = LoginUser.objects.filter(id = user_id).first()
    if request.method == "POST":
        ## 获取 数据,保存数据
        data = request.POST
        print (data.get("email"))
        user.username = data.get("username")
        user.phone_number = data.get("phone_number")
        user.age = data.get("age")
        user.gender = data.get("gender")
        user.address = data.get("address")
        user.photo = request.FILES.get("photo")
        user.save()
        print (data)
    return render(request,"personal_info.html",locals())

3.效果


在这里插入图片描述


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值