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
原文地址:https://www.cnblogs.com/xiaoxiamiaichiyu/p/14022651.html