一、 自定义接口规范(渲染器)1. 渲染器的基本原理
序列化在返回数据后并不是直接做为响应数据,而是经过渲染器的渲染,生成不同格式的响应内容 。
重构渲染器就是重写父类渲染器的 render 方法 。
1render(self, data, accepted_media_type=None, renderer_context=None)
data : 响应数据(序列化器的.data 属性),等同于 renderer_context[“ response “].data 的值
accepted_media_type=None : 可选的。如果提供,这是由内容协商阶段确定的所接受的媒体类型。
根据客户端的 Accept: 头,这可能比渲染器的 media_type 属性更具体,可能包括媒体类型参数。例如 “application/json; nested=true” 。
renderer_context=None : 可选的。如果提供,这是一个由 view 提供的上下文信息的字典。
默认情况下这个字典会包括以下键: view , request , response , args , ...
模型关联关系
用例和项目之间的关联可以直接通过 config,因为 config 是套件和用例的扩展,相当于用例和套件本身 。
一、 模块的包管理1. 创建模型包如果模型过多时,需要把模型分别存储。
在应用中创建一个名为 models 的包,将所有的模型文件全部存放在 该文件夹下, 删除原来的 models.py 文件。
2. 创建 模型文件在 __init__.py 文件中,要使用 显示明确的方式导入每个模型,这样不会让命名混淆,便于可读。
123456# sqpt/models/__init__.pyfrom .hr3 import Request, Case, Config, Suite, Stepfrom .auth import Userfrom .base import CommonInfofrom .mgr import Environment, Project
hr3.py 存放所有核心数据模型
mgr.py 存放所有项目管理相关模型
123456789101112131415161718192021222324252627282930313233343536373 ...
一、 用户注册注册流程:
1. 注册序列化器123456789101112131415161718192021222324252627282930# serializers.py# 注册序列化器class RegisterSerializer(serializers.ModelSerializer): # admin_code 不在user 模型字段中,需要单独定义 admin_code = serializers.CharField(default='') # 字符串类型 class Meta: model = User fields = ['username', 'password', 'email', 'phone', 'realname', 'admin_code'] # 额外的验证 --- 覆盖父类的方法 def validate(self, attrs): # attrs ...
一、 序列化器中的类属性字段序列化 中所定义的 类属性 字段,一般情况下与 模型类 字段 相对应
默认情况下,这些类属性字段既可以进行序列化输出,也可以进行反序列化输入
不需要输入(反序列化)、输出(序列化)的字段,则不需要定义,定义的字段 则必须出现在 fields 列表中
只需要反序列化输入,则定义 write_only = True
只需要序列化输出,则定义 read_only = True
响应的参数如果是多个查询集,需要在 JsonResponse() 中传参 many=True
label:当前字段在前端的 api 页面中所显示的字段名称
allow_null = False:当前字段是否允许传 None,默认是 False(必填字段 False,反之则 True)
allow_blank = False:当前字段是否运行为空,默认是 False(必填字段 False,反之则 True)
required=False:当前字段允许不传,默认是 True(必填字段 True,反之则 False)
二、反序列化_校验机制调用序列化器对象的 is_valid() 方法,校验前 ...
一. 语法结构
12345public class Demo{ public static void main(String[] args) { System.out.println("你好,java"); }}
说明:
Demo :表示一个类,类名为 Demo,与文件名相同
public: 表示一个公有的类
public static void main:表示一个主方法,即程序的入口(固定写法)
System.out.println("你好,java"); : 表示输出到屏幕,“;”表示语句结束
Java 语言严格区分大小写;
每个语句都必须以 “ ;” 结束;
括号都是成对出现的;
一个源文件只能有 一个 public类,其他类的数量不限;
每一个类在编译完成后,都会生成一个 “ .class ” 文件
如果原文件包含 public 类,则文件名必须与 类名相同;
二. 常用的转义字符
字符
说明
案例
运行结果
\t
制表符
System.out.println(“北京\t 天 ...
一、判断1. if……else if …… else语法if(条件表达式){ 执行代码块;} else if (条件表达式) { 执行代码块;} else { 执行代码块;}
123456789101112131415161718192021// 引入 scannerimport java.util.Scanner;public class demo01{ public static void main(String[] args) { // 创建 scanner 对象 Scanner myScanner = new Scanner(System.in); System.out.println("请输入年龄"); int age = myScanner.nextInt(); if ( age >= 18 && age < 60){ System.out.println("他成年了"); }else if ( age >= 60) { S ...
一、数组 [ ]
数组:可以存放多个同一类型的数据数组的下标从 0 开始
1. 动态初始化 - 确定元素数量方式 11234数组类型 数组名[] = new 数组类型[大小]// 创建一个数组,数组名为 a ,可以存放 5 个 int 类型的元素int a[] = new int[5];
方式 212345数组类型 数组名[]; 或 数组类型[] 数组名;数组名 = new 数据类型[大小];int a[];a = new int[5];
2.静态初始化 - 不确定元素数量123数据类型 数组名[] = {元素,元素,元素...}int a[] = {2,5,7,8,99,2,4,5,};
数组是多个相同类型的数据组合,不同类型的数据不能放到同一数组中
数组创建后,如果没有赋值,则默认值为 byte、short、int、long 为 0,float、double 为 0.0,char 为\u0000, boolean 为 false, String 为 null
数组的下标从 0 开始
不同类型存放时需要遵循 数据自动类型转换 规则
3. ...
一、类1. 属性
类的属性一般是基本数据类型,也可以是引用数据类型
属性的定义语法和变量的定语语法相同;
访问修饰符 属性类型 属性名;
属性如果不赋值,则默认值与数组一致;
1234class Cat{ String name; int age;}
2. 创建对象12345678class Cat{ String name; int age;}// 先声明再创建Cat cat;cat = new Cat();
1234567class Cat{ String name; int age;}// 直接创建Cat cat = new Cat();
二、方法1.成员方法123访问修饰符 返回数据类型 方法名(形参列表){ 方法体;}
访问修饰符: 控制方法的使用范围,不写则默认
四种: public(公共的)、protected(受保护的)、default(默认)、private(私有的)
返回数据类型 : 可以返回任意类型;
如果有多个返回值时,可以 ...
一、包
包的本质就是不同的文件夹
区分相同名字的类
控制访问范围
1package com.hspedu;
说明:
package: 关键字,表示打包
com.hspedu : 表示表名
命名规则:
只能包含字母、数字、下划线、小圆点
不能以数字开头
不能是关键字和保留字
一般是小写字母+小圆点
com.公司名.项目名.业务模块名
如:com.sina.crm.user
常用的包:
java.lang
基本包,默认引入,不需要再次引入
java.util
系统提供的工具包,工具类,如:Scanner
java.net
网络包,网络开发
java.awt
做 java 的界面开发,GUI
123import java.util.Scanner; // 引入 Scanner 类import java.util.* // 引入 util 下所有的类
注意事项:
package 的作用是声明当前类所在的包,需要写在类的最上边,一个类中最多只能写一个 package
import 指令放在 package 的下面,在类定义的前面,可以有多句且没有顺序 ...














