zoukankan      html  css  js  c++  java
  • 代码发布项目

    代码发布概述图

    如何解决当服务器特别多的时候,从同一个地方下载数据会出现压力过大的时刻(上传者只有一个,下载者却有很多歌,上传者压力太大)

    采用比特流技术

    将所有的人都变成既可以是上传者也可以是下载者

    项目的概述:

    利用modelform实现服务器表的增删改查

    模板的基础作为模板的html文件上一般情况下,都应该定义在三个区域css区,html区和js区

    针对服务器添加数据的功能,需要对提交的数据进行数据校验,还需要展示提示的信息,当模型字段非常多的时候前端页面展示代码量书写会很多,如何解决这样的问题?

    '''
    标签渲染
    数据校验
    信息展示
    '''
    这三者可以用modelform组件来做,会比form组件简单很多
    class ServerModelForm(ModelForm):
        class Meta:
            model = models.Server
            fields = "__all__"
    
    
        def __init__(self,*args,**kwargs):
            super().__init__(*args,**kwargs)
            # print(self.fields)  # OrderedDict([('hostname', <django.forms.fields.CharField object at 0x10c99c198>)])
            # 给所有的字段加class属性
            for k,field_obj in self.fields.items():
                field_obj.widget.attrs['class'] = 'form-control'
        	return redirect('/server/list/')  # 可以写路径
    		return redirect('server_list')  # 还可以写别名  但是如果出现有名无名分组的反向解析 则必须使用reverse方法
    

    服务器管理

    class Server(models.Model):
        '''服务器表'''
        hostname = models.CharField(verbose_name='主机名', max_length=64)
    

    语言环境

    django默认的语言环境是英文,但是它的内部其实支持多个国家的语言,只需要你自己手动配置即可

    # LANGUAGE_CODE = 'en-us'
    LANGUAGE_CODE = 'zh-hans'
    
    # 如何查看django到底支持哪些语言环境
    from django.conf import global_settings
    LANGUAGES = [
        ('af', gettext_noop('Afrikaans')),
        ('ar', gettext_noop('Arabic')),
        ('ast', gettext_noop('Asturian')),
      ...
    ]
    

    针对删除功能,我们想做一个二次确认的过程(ajax结合sweetalert实现二次确认弹框)

    <script>
            function removeData(ths,sid) {
                var res = confirm('你缺点要删除吗?');
                {#alert(res)  //  布尔值#}
                if (res){
                    // 朝后端发送删除数据的请求
                    $.ajax({
                        url:'/server/delete/' + sid + '/',
                        type:'get',
                        success:function (args) {
                            // 删除成功之后 页面应该立刻展示删除之后的效果
                            // 1 直接刷新  不太好  设计到分页的情况不太好
                            {#window.location.reload()#}
                            if (args.status){
                                // 2 利用DOM操作实时删除
                                $(ths).parent().parent().remove()
                            }
                        }
                    })
                }
            }
        </script>
    

    项目管理

    class Project(models.Model):
        """项目表"""
        title = models.CharField(verbose_name='项目名',max_length=64)
        repo = models.CharField(verbose_name='仓库地址',max_length=128)
        
        env_choices = (
            ('prod','正式'),
            ('test','测试')
        )
        env = models.CharField(verbose_name='环境',max_length=16,choices=env_choices,default='test')
    

    代码的优化

    • 将所有的modelform单独抽取出来

    • 将modelform类中所有公共的部分抽取出来形成基类

    """
    什么是类?
    	类是对象公共的属性和技能的结合体
    什么是父类?
    	父类是类公共的属性和技能的结合体
    """
    # 父类
    from django.forms import ModelForm
    
    
    class BaseModelForm(ModelForm):
        def __init__(self,*args,**kwargs):
            super().__init__(*args,**kwargs)
            # print(self.fields)  # OrderedDict([('hostname', <django.forms.fields.CharField object at 0x10c99c198>)])
            # 给所有的字段加class属性
            for k,field_obj in self.fields.items():
                field_obj.widget.attrs['class'] = 'form-control'
                
                
                
    # 子类
    from app01.myforms.base import BaseModelForm
    from app01 import models
    
    
    class ServerModelForm(BaseModelForm):
        class Meta:
            model = models.Server
            fields = "__all__"
    

    当模型表字段特别多的时候,并且并不是所有的字段都需要展示到前端给用户看

    from django.forms import ModelForm
    class BaseModelForm(ModelForm):
        # 自定义字段是否需要加额外属性的配置
        exclude_bootstrap = []
    
        def __init__(self,*args,**kwargs):
            super().__init__(*args,**kwargs)
            # print(self.fields)  # OrderedDict([('hostname', <django.forms.fields.CharField object at 0x10c99c198>)])
            # 给所有的字段加class属性
            for k,field_obj in self.fields.items():
                if k in self.exclude_bootstrap:
                    continue  # 排除在外不添加样式
                field_obj.widget.attrs['class'] = 'form-control'
    

    项目表需要额外添加字段

        # 线上服务器地址
        path = models.CharField(verbose_name='线上地址',max_length=64)
        # 关联服务器
        """
        一个项目可以跑在多个服务器上
        一个服务器其实也可以跑多个项目 (公司服务器不够的时候 可以混用)
        """
        servers = models.ManyToManyField(to='Server',verbose_name='关联服务器')
    

    项目展示页面额外展示当前两个字段

  • 相关阅读:
    BZOJ3105:[CQOI2013]新Nim游戏(线性基,贪心)
    BZOJ5102:[POI2018]Prawnicy(贪心,堆)
    BZOJ3533:[SDOI2014]向量集(线段树,三分,凸包)
    BZOJ3569:DZY Loves Chinese II(线性基)
    BZOJ3534:[SDOI2014]重建(矩阵树定理)
    【BZOJ 1202】 [HNOI2005]狡猾的商人
    【BZOJ 1003】 [ZJOI2006]物流运输trans
    【BZOJ 2321】 [BeiJing2011集训]星器
    【BZOJ 1010】 [HNOI2008]玩具装箱toy
    【BZOJ 2730】 [HNOI2012]矿场搭建
  • 原文地址:https://www.cnblogs.com/godlover/p/12710264.html
Copyright © 2011-2022 走看看