首页 > 其他 > 详细

Django-前后端分离

时间:2020-01-20 00:41:49      阅读:128      评论:0      收藏:0      [点我收藏+]

新建一个子项目testcase

 在Django里新建一个子项目testcase,新建的项目需要在settings.py->INSTALLED_APPS里增加子项目的名字,即‘testcase‘,否则后续建表的时候是找不到这个子项目的,也会生效。

技术分享图片

建表时不同的表之间都会有一些公共的字段,如果建表的时候每个类里的都写一遍很麻烦,此时我们可以把公共的字段抽离出来写一个父类,其余表在使用的时候继承即可。需要注意的是父类这个表在建表时是不应该被创建的,所以需要有一个特殊的声明。详情见例子

建表时,多对多关系的两张表在django里是通过创建第三张表来实现的多对多关系的,

class BaseModel(models.Model):  #父类
    create_time = models.DateTimeField(auto_now_add=True, verbose_name=创建时间)
    update_time = models.DateTimeField(auto_now=True, verbose_name=修改时间)
    is_delete = models.BooleanField(verbose_name=是否删除, default=False) #default=False表示删除的时候不会真的被删除,会被标记false
    class Meta:
        abstract = True #声明这个类只是用来继承的,不会创建这张表

class CaseSet(BaseModel):  #继承父类
    name = models.CharField(verbose_name=集合名称,max_length=60)
    desc = models.CharField(verbose_name=集合描述,max_length=70)


    def __str__(self):
        return self.name

    class Meta:
        db_table = case_set
        verbose_name =用例集合表
        verbose_name_plural = verbose_name
class Case(BaseModel):  #用例表
title = models.CharField(verbose_name=‘用例标题‘,max_length=80,db_index=True,unique=True)
desc = models.CharField(verbose_name=‘用例描述‘,max_length=120)
method_choice = [
[0,‘get‘],
[1,‘post‘],
[2,‘put‘],
[3,‘delete‘],
]
method = models.SmallIntegerField(choices=method_choice,verbose_name=‘请求方式‘,default=0)
url = models.URLField(max_length=50,verbose_name=‘请求url‘)
params = models.TextField(verbose_name=‘请求参数‘)
run_count = models.IntegerField(verbose_name=‘运行次数‘,default=0,null=True,blank=True)
run_time = models.DateTimeField(verbose_name=‘运行时间‘,null=True,blank=True)
case_set = models.ManyToManyField(CaseSet,db_constraint=False,verbose_name=‘用例集合‘,null=True,blank=True)
    #ManyToManyField表示多对多关系,case与case_set表是多对多关系,上面这一行实际会创建出第三张表来记录多对多关系。
    def __str__(self):
return self.title

class Meta:
db_table = ‘case‘
verbose_name =‘用例表‘
verbose_name_plural = verbose_name

前后端分离的项目后端返回的结果就不能用render了,要返回json串,需要导入from django.http import JsonResponse

多个子项目时如何管理url?

一个项目里有多个子项目,如果把所有的url都配置在django项目下的urls.py里会比较乱,这时我们可以在每一个子项目里单独创建一个urls.py文件,用于单独配置每个项目的url,只需在django项目里总的urls.py里把子项目的url配置进去即可。

技术分享图片

 

 

 Django里的参数校验form

导入:from django import forms

form校验通过够会返回一个字典,在使用字典数据时用**form.cleaned_data

form里可以自定义校验规则,例如校验methon字段,要以clean开头,即def clean_method,这属于校验单个字段,如果要校验多个字段,直接def clean

 

 方法一:

# form 校验请求参数
class CaseForm(forms.Form):
    """校验请求参数"""
    title = forms.CharField(max_length=50, min_length=2)
    desc = forms.CharField(max_length=60, required=False)
    method = forms.IntegerField()  # 0 1 2 3
    url = forms.URLField()
    params = forms.CharField(max_length=100)

    def clean_title(self):  # 校验单个字段
        title = self.cleaned_data.get(title)
        if models.Case.objects.filter(title=title).count() > 0:
            raise ValidationError(用例标题已经存在) #抛出一个异常,代码不会再往下走
        return title

    def clean(self):  # 校验多个字段
        title = self.cleaned_data.get(title)
        method = self.cleaned_data.get(method)

引用的时候:
class CaseView(View):
    def post(self, request):
        form = CaseForm(request.POST)
        if form.is_valid():
            print(这是用了form校验的)
            models.Case.objects.create(**form.cleaned_data)
            data = {code: 0, msg: 添加成功}

        else:
            print(form.errors.as_data())
            data = {code: -1, msg: 参数错误}

        return JsonResponse(data)

方法二:这种和数据库有关系的校验还有一种简便的方法

class CaseForm2(forms.ModelForm):
    class Meta:
        # fields = ‘__all__‘ #代表所有字段
        # fields=[‘method‘,‘url‘] #代表校验这两个字段
        exclude=[case_set] #排除某个字段
        model = models.Case #指关联哪张表

引用的时候:
class CaseView(View):
    def post(self, request):
        form = CaseForm2(request.POST)
        if form.is_valid():
            print(这是用了form校验的)
            form.save() #save方法就是直接连数据库保存,同下面一行,方法二才可以这么写
            #models.Case.objects.create(**form.cleaned_data)  #手动找到这张表进行操作,把检验通过的数据插入到表里
            data = {code: 0, msg: 添加成功}

        else:
            print(form.errors.as_data())
            data = {code: -1, msg: 参数错误}

        return JsonResponse(data)

自定义返回类型

from django.http import JsonResponse

def NbResponse(code=0,msg=操作成功,**kwargs):
    response = {code:code,msg:msg}
    response.update(kwargs)
    return JsonResponse(response,json_dumps_params={ensure_ascii: False})

 

如果不知道数据库表的信息,可通过下方命令将数据库的表生成到model1.py文件中,就不需要自己在写了,这种方法只会生成单张表,如果表和表之间有关联关系,需自己手动关联。

python manage.py inspectdb > model1.py

 

Django如何连接redis

在settings.py中配置如下内容

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://118.23.3.41:6399/0",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "CONNECTION_POOL_KWARGS": {"max_connections": 100},
            "PASSWORD": "666667&*",  # 密码
        }
    },
    "redis2": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "CONNECTION_POOL_KWARGS": {"max_connections": 100, decode_responses: True},
            "PASSWORD": "123456",  # 密码
        }
    }
}  # redis配置

 

 

 

 

 

 

 

 

 

 

 

 

 

 




Django-前后端分离

原文:https://www.cnblogs.com/tata-learning/p/12216046.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!