会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132837个问题

老师您好,为什么在django的shell界面中测试时,执行serializer.save()之前需要先执行serializer.validated_data,否则会报错,但是在views.py中,在serializer.save()之前未加上serializer.validated_data,却不会报错?


项目根目录下输入python manage.py shell后,执行如下代码:

# 将 json格式的字节串 转换为字典
from rest_framework.parsers import JSONParser
stream = io.BytesIO(b'{"name":"rose", "age":19, "sex":2}') #这里如果把单引号和双引号交换,执行JSONParser().parse(stream)时会报错rest_framework.exceptions.ParseError: JSON parse error - Expecting property name enclosed in double quotes
# 得到字典数据, {'id': 1,......}
data_dict = JSONParser().parse(stream)

# 将字典数据 反序列化
serializer = StudentSerializer(data=data_dict)
# 必须执行这一步验证, 返回True才可以获取后续的 validated_data数据和执行 save等方法
serializer.is_valid()
# 得到 OrderedDict([('name', 'terry'),......] , 会忽略掉 id 属性
serializer.validated_data
# 保存到数据库中
serializer.save()

django项目的views.py中:

@csrf_exempt
def students(request):
    if request.method == 'GET':
        student_li = Student.objects.all()
        serializer = StudentSerializer(student_li, many=True)
        return JsonResponse(serializer.data, safe=False)

    elif request.method == 'POST':
        data = JSONParser().parse(request)
        serializer = StudentSerializer(data=data)
        if serializer.is_valid():
            serializer.save()
            return JsonResponse(serializer.data, status=201)
        return JsonResponse(serializer.errors, status=400)


Python 全系列/第十二阶段:Python_Django3框架/Django高级 31231楼
Python 全系列/第五阶段:数据库编程/mysql的使用 31232楼
JAVA 全系列/第一阶段:JAVA 快速入门/面向对象详解和JVM底层内存分析 31234楼

老师,您好,这段代码为什么我赋值180,它的运行结果就是180呢?代码里面有年龄判断,您帮我看看

package File;
/**
 * 测试封装的使用
 * @author zhang - dell
 *
 */
class Person{
	//两个私有属性
	private String name;//姓名
	private int age;//年龄
	
	//Person无参构造方法
	public Person() {
		
	}
		/**
		 * 	set 和get的使用方法
		 * 
		 * set:是给属性赋值
		 * get:是获取属性值
		 */
	public Person(String name,int age) {//带参构造方法name和年龄
		this.name = name;//在构造方法中this指的的当前name的值
		//setAge(age);
		this.age = age;//构造方法中不能直接赋值,应该使用setAge方法
	}
	
	public void setName(String name) {//给属性赋值
		this.name = name;
	}
	
	public String getName() {//获取属性值
		return name;
	}
	
	public void setAge(int age) {//给属性赋值
		//在赋值之前先判断年龄是否合法
		if(age > 130 || age < 0) {//给属性赋值判断
			this.age = 18;//不合法赋默认值18
		}else {
			this.age = age;//合法才给属性age
		}
	}
	@Override
	public String toString() {//重写toString方法
		// TODO Auto-generated method stub
		return  "Person[Person"+name+",age="+age+"]";//返回字符串的内容
	}
	
	
}

public class Test02 {
	public static void main(String[] args) {
		Person p = new Person();
		p.setName("李四");
		p.setAge(-45);
		System.out.println(p);
		
		System.out.println("======================");
		
		p.setName("Lili");
		p.setAge(60);
		System.out.println(p);
		
		System.out.println("======================");
		
		Person p2 = new Person("李四",180);
		System.out.println(p2);
	}

}


运行结果:

blob.png

JAVA 全系列/第一阶段:JAVA 快速入门/面向对象详解和JVM底层内存分析 31235楼
JAVA 全系列/第十一阶段:分布式RPC调用和分布式文件存储/Swagger 31237楼
Python 全系列/第一阶段:Python入门/控制语句 31241楼
Python 全系列/第十四阶段:Python 爬虫开发/爬虫反反爬- 31244楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637