文章目录
一、视图类
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())