美文网首页Django - 开发站点
Django NBA Web开发 - Step 14 球队数据信

Django NBA Web开发 - Step 14 球队数据信

作者: AllenBigBear | 来源:发表于2019-06-26 22:30 被阅读2次

    之前球员名单算是添加了进去,然后想做为以后的球队/球员数据分析做一些基础。
    所以去下载了一份球队数据 2018-2019 常规赛球队总数据。

    1:建立模型

    首先我创建了一个新的app,名字为stats.
    然后在其中的models里面创建了模型Team_Season_Regular

    class Team_Season_Regular(models.Model):
        id = models.AutoField(primary_key=True)
        rank = models.IntegerField('Rank',default=0,)
        team = models.CharField('Team',max_length=50)
        games = models.IntegerField('G',default=0)
        MP = models.IntegerField('MP',default=0)
        FG = models.IntegerField('FG',default=0)
        FGA = models.IntegerField('FGA',default=0)
        FGP = models.FloatField('FG%',default=0)
        ThreeP = models.IntegerField('3P',default=0)
        ThreePA = models.IntegerField('3PA',default=0)
        ThreePP = models.FloatField('3P%',default=0)
        TwoP = models.IntegerField('2P',default=0)
        TwoPA = models.IntegerField('2PA',default=0)
        TwoPP = models.FloatField('2P%',default=0)
        FT = models.IntegerField('FT',default=0)
        FTA = models.IntegerField('FTA',default=0)
        FTP = models.FloatField('FT%',default=0)
        ORB = models.IntegerField('ORB',default=0)
        DRB = models.IntegerField('DRB',default=0)
        TRB = models.IntegerField('TRB',default=0)
        AST = models.IntegerField('AST',default=0)
        STL = models.IntegerField('STL',default=0)
        BLK = models.IntegerField('BLK',default=0)
        TOV = models.IntegerField('TOV',default=0)
        PF = models.IntegerField('PF',default=0)
        PTS = models.IntegerField('PTS',default=0)
        Season = models.IntegerField('Season',default=0)
    

    2:创建url路由

    app_name = 'stats'
    urlpatterns=[
                path('team_regular',team_regular,name='team_regular'),
    ]
    

    3:创建views函数

    def team_regular(request,**kwargs):
    
        #取出对象的值得集合,对象是一个valuequeryset
        teams = Team_Season_Regular.objects.values()
    
        #遍历每个实例对象
        for i in teams:
            #将几个命中率的数据转换成百分比
            i['FGP'] = '{:.2f}%'.format(i['FGP']*100)
            i['ThreePP'] = '{:.2f}%'.format(i['ThreePP']*100)
            i['TwoPP'] = '{:.2f}%'.format(i['TwoPP'] * 100)
            i['FTP'] = '{:.2f}%'.format(i['FTP'] * 100)
    
        #取得模型的字段名提供给前端,并忽略第一个和最后一个
        field_names = Team_Season_Regular._meta.fields[1:-1]
        return render(request,'team_regular.html',locals())
    

    其中teams是一个valuequeryset的结果,里面是一个列表,每个元素是一个一个实例对象的所有值,而且这个元素是一个字典形式,键为字段名值为实例数值.
    接着用i来遍历teams,并通过访问键来修改值得内容,因为原始数据里面,各项投篮命中率都是小于1的小数,而我想在面板上显示成百分比.

    3:前端渲染

    {% block content %}
    
    <div id="table_regular_whole_area">
        <table id="table_regular" class="table-striped">
                <tr id="table_head_area">
                    {% for col in field_names %}
                        <td class ="team_regular_table">{{ col.verbose_name }}</td>
                    {% endfor %}
                </tr>
                        <!--遍历出每个球队实例-->
                        {% for team in teams %}
                        <!--每个实例创建一个row-->
                        <tr>
                            <!--取出每个实例字典中的"值"-->
                            {% for value in team.values %}
                                <!--去除第一个和最后一个数值,不需要id和赛季信息-->
                                {% if forloop.first or forloop.last %}
                                {% else %}
                                    <!--横向创建出所有数据-->
                                    <td class="team_regular_table">
                                        {{ value }}
                                    </td>
                                {% endif %}
                            {% endfor %}
                        </tr>
                        {% endfor %}
        </table>
    </div>
    {% endblock %}
    

    4:前端优化

    其实在做前端的时候本来想无脑套bootstrap的,但是套了以后发现效果并不是很好,所以自己又单独写了一些css,挂在外面单独的文件里。
    其中最主要的一个是给table加上了layout是fixed的属性。
    这样的效果是什么?
    就是表格的栅格,不会因为单元格内部的内容长短不一致而扭曲了。
    而是会非常整齐的呈现表格了。

    #table_regular {
      table-layout:fixed;
    }
    

    5:呈现效果

    最终效果

    参考资料:
    https://www.basketball-reference.com/

    相关文章

      网友评论

        本文标题:Django NBA Web开发 - Step 14 球队数据信

        本文链接:https://www.haomeiwen.com/subject/wvihcctx.html