zoukankan      html  css  js  c++  java
  • python 后端 数据库的创表及增删改查 简单使用

    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)
    models.py

    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'), ]
                                )
    
    ""
    models.py

    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)
    views.py

    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"})
    views.py

    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
    views.py

    4 序列化

    from rest_framework import serializers
    from .models import *
    
    class BooksSerializers(serializers.ModelSerializer):
    
        class Meta:
            model=Books
            fields="__all__"
    serializers
  • 相关阅读:
    你是否听说过 HashMap 在多线程环境下操作可能会导致程序死循环?
    深入浅出分析 PriorityQueue
    深入浅出分析 ArrayDeque
    深入浅出的分析 Set集合
    深入浅出的分析 Properties
    深入浅出分析 HashMap
    深入浅出的分析 Hashtable
    深入浅出的分析 WeakHashMap
    深入浅出的分析IdentityHashMap
    python 执行js PyExecJS
  • 原文地址:https://www.cnblogs.com/xiaoxiamiaichiyu/p/14022651.html
Copyright © 2011-2022 走看看