1.创表时字段的类型及常用字段
class UserGroup(models.Model): uid=models.AutoField(primary_key=True) #主键 自增字段 name=models.CharField(max_length=32,null=True,blank=True) #字符串字段 可以为空 email=models.EmailField(max_length=500) #邮件地址 text=models.TextField() #文本 ctime=models.DateTimeField(auto_now_add=True) #只有添加时才会更新 uptime=models.DateTimeField(auto_now=True) #只要修改就会更新时间 ip1 = models.IPAddressField() # 字符串类型,Django Admin以及ModelForm中提供验证 IPV4 机制 ip2 = models.GenericIPAddressField() # 字符串类型,Django Admin以及ModelForm中提供验证 Ipv4和Ipv6 active = models.BooleanField(default=True) data01 = models.DateTimeField() # 日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ data02 = models.DateField() # 日期格式 YYYY-MM-DD data03 = models.TimeField() # 时间格式 HH:MM[:ss[.uuuuuu]] age = models.PositiveIntegerField() # 正小整数 0 ~ 32767 balance = models.SmallIntegerField() # 小整数 -32768 ~ 32767 money = models.PositiveIntegerField() # 正整数 0 ~ 2147483647 bignum = models.BigIntegerField() # 长整型(有符号的) -9223372036854775808 ~ 9223372036854775807 user_type_choices = ( (1, "超级用户"), (2, "普通用户"), (3, "普普通用户"), ) user_type_id = models.IntegerField(choices=user_type_choices, default=1)
2 字段的值
""" null 数据库中字段是否可以为空 default 数据库中字段的默认值 primary_key 数据库中字段是否为主键 db_index 数据库中字段是否可以建立索引 unique 数据库中字段是否可以建立唯一索引 verbose_name Admin中显示的字段名称 blank Admin中是否允许用户输入为空 editable Admin中是否可以编辑 help_text Admin中该字段的提示信息 error_messages 自定义错误信息(字典类型),从而定制想要显示的错误信息; 字典健:null, blank, invalid, invalid_choice, unique, and unique_for_date 如:{'null': "不能为空.", 'invalid': '格式错误'} db_column 数据库中字段的列名 db_tablespace unique_for_date 数据库中字段【日期】部分是否可以建立唯一索引 unique_for_month 数据库中字段【月】部分是否可以建立唯一索引 unique_for_year 数据库中字段【年】部分是否可以建立唯一索引 choices Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作 如:gf = models.IntegerField(choices=[(0, '何穗'),(1, '大表姐'),],default=1) validators 自定义错误验证(列表类型),从而定制想要的验证规则 from django.core.validators import RegexValidator from django.core.validators import EmailValidator,URLValidator,DecimalValidator, MaxLengthValidator,MinLengthValidator,MaxValueValidator,MinValueValidator 如: test = models.CharField( max_length=32, error_messages={ 'c1': '优先错信息1', 'c2': '优先错信息2', 'c3': '优先错信息3', }, validators=[ RegexValidator(regex='root_d+', message='错误了', code='c1'), RegexValidator(regex='root_112233d+', message='又错误了', code='c2'), EmailValidator(message='又错误了', code='c3'), ] ) ""
3 视图views 三种增删改查操作
3.1 APIView的使用
from rest_framework.views import APIView from rest_framework.response import Response from .serializers import * # from .models import * class BooksView(APIView): """查询""" def get(self,request): queryset=Books.objects.all() obj=BooksSerializers(queryset,many=True) return Response(obj.data) """添加""" def post(self,request): queryset=BooksSerializers(data=request.data) if queryset.is_valid(): queryset.save() return Response({"code":200,"msg":"添加成功"}) print(queryset.errors) return Response({"code":400,"msg":"错误信息"}) """删除""" def delete(self,request): id=request.POST.get("id") obj=Books.objects.filter(id=id).delete() return Response({"code":200,"msg":"删除成功"}) """修改""" def put(self,request): nid=request.POST.get("id") book_obj = Books.objects.get(id=nid) validated_data = BooksSerializers(data=request.data, instance=book_obj,partial=True) #partial=True可以部分字段 if validated_data.is_valid(): validated_data.save() return Response(validated_data.data) else: return Response(validated_data.errors)
3.2 View的使用
from django.http import JsonResponse import json from rest_framework.views import View from .models import * class BooksView(View): def get(self, request): books = Books.objects.filter(is_delete=False) book_list = books.values('id', 'btitle', 'bpub_date', 'bread', 'bcomment') book_list = list(book_list) data = { "code":0, "msg":"success", "books":book_list } return JsonResponse(data) def post(self,request): body_json = request.body.decode() body_dict = json.loads(body_json) btitle = body_dict.get('btitle') bpub_date = body_dict.get('bpub_date') bread = body_dict.get('bread') bcomment = body_dict.get('bcomment') book = Books(btitle=btitle, bpub_date=bpub_date, bread=bread, bcomment=bcomment) book.save() return JsonResponse({"code": 0, "msg": "success"}) def put(self, request): body_json = request.body.decode() body_dict = json.loads(body_json) id = body_dict.get('id') btitle = body_dict.get('btitle') bpub_date = body_dict.get('bpub_date') bread = body_dict.get('bread') bcomment = body_dict.get('bcomment') book = Books.objects.get(id=id) book.btitle = btitle book.bpub_date = bpub_date book.bread = bread book.bcomment = bcomment book.save() return JsonResponse({"code": 0, "msg": "success"}) def delete(self, request): body_json = request.body.decode() body_dict = json.loads(body_json) id = body_dict.get('id') book = Books.objects.get(id=id) book.is_delete = True book.save() return JsonResponse({"code": 0, "msg": "success"})
3.3 ModelViewSet的使用
from rest_framework import viewsets from rest_framework.response import Response from .serializers import * from .models import * class BooksView(viewsets.ModelViewSet): queryset = Books.objects.all() serializer_class = BooksSerializers
4 序列化
from rest_framework import serializers from .models import * class BooksSerializers(serializers.ModelSerializer): class Meta: model=Books fields="__all__"