Django项目复习笔记

概念

模式

采用了MVC的框架模式,即模型M,视图V和控制器C,
可以称为MVT模式,模型M,视图V,模板T

Model - 数据处理,使用Object-Relation-Map
Responsible for data access, adapts Object-Relation-Map tool, Django.models

View - 用户UI,User Interface, adapt VUE.js to build the website page

Controller -处理M和V的信息,在前后端都存在
Responsible for processing View and Model messages

ORM 是什么?

类名对应 ---------> 数据库中的表名

类属性对应---------> 数据库里的字段

类实例对应 --------> 数据库表里的一行数据

Django ORM 优点:

ORM提供了对数据库的映射,不用直接编写SQL代码,只需像操作对象一样从数据库操作数据。
让软件开发人员专注于业务逻辑的处理,提高了开发效率。

Django表单

GET
POST
GET 方法
 浏览器请求一个页面
 搜索引擎检索关键字的时候

GET方法是通过键值对的方式显示从用户那边获取的数据,然后通过“&”将其组合形成一个整体的字符串,最后加上“?”,将组合后的字符串拼接到URL内,生成一个url地址。它既不适用于大量数据,也不适合于二进制数据(例如图像)。使用GET 管理表单请求的Web应用程序存在安全风险:攻击者很容易模仿表单的请求来访问系统的敏感部分。GET仅应用于不影响系统状态的请求。诸如Web搜索表单类,它可以轻松对请求到的URL进行共享,提交等操作。

POST 方法
浏览器打包数据
以编码的形式进行传输

POST可以更改系统状态的任何请求,利用POST方法,浏览器可以将表单数据进行打包操作,然后以编码的方式进行传输,最后将它发送到服务器,并接收对其进行响应。

架构分析

(图片来源W3C School)
From W3C school

在这里插入图片描述
转载:https://blog.csdn.net/dapeng0802/article/details/49787263

前端代码

位置

在这里插入图片描述
部分代码

<template>
  <div>
     <b-field label="This page shows the Result"/>
    <el-table :data="listt"
              style="width: 70%"
              width="550px"
              height="600px"
              border>
      <!--  @cell-dblclick="toggleSelection"-->
      <!--              @current-change="handleSelectionChange"-->

      <el-table-column prop="id" label="Item you Selected" min-width="100">
        <template slot-scope="scope"> {{ scope.row.id }}</template>
      </el-table-column>

      <el-table-column prop="Specific Item" label="Recommended Item" min-width="100">
        <template slot-scope="scope"> {{ scope.row.item }}</template>
      </el-table-column>

             <el-table-column prop="Specific Price" label="Item Price/£" min-width="50">
        <template slot-scope="scope"> {{ scope.row.price }}</template>
      </el-table-column>

    </el-table>

</div>
</template>
<script type="text/ecmascript-6">
export default {
  name: "Result",
  // beforeRouteEnter(to, from, next) {
  //   this.showResult()
  //   next();
  // },
    mounted() {
    console.log('hello - mounted');
   this.showResult()
  },
   data() {
            return {
                listt:[],
                noItem:[],
                columns: [
                    {
                        field: 'id',
                        label: 'ID',
                       width: '100',
                    },
                    {
                        field: 'item',
                        label: 'item',
                    },
                ]
            }
        },
  methods:{
     showResult() {
      this.$http.get('http://127.0.0.1:8000/getResult')
        .then((response) => {
          var res = JSON.parse(response.bodyText)
          console.log(res)
          if (res.error_num === 0) {
            this.listt = res['list']
            this.noItem = res['noItem']
            // this.preferenceListtwo = res['listTwo']
            console.log('print the all')
          } else {
            this.$message.error('none result on calculation')
            console.log(res['msg'])
          }
        })
    }
  },
    }
</script>

The frontend part uses Vue.js as frontend scaffolding, and is equipped with Buefy and Element as UI Library.

该页面的流程图
在这里插入图片描述

def get_Result(request):
    response = {}
    result, items = algor()
    noItem=[]

    for i in result:
        if ''.join(items).find(i['item']) == -1 :
           print(' '.join(items))
           print(' ')
           print(i['item']?)

    try:
 

        response['list'] =result
        response['noItem'] = noItem
        response['msg'] = 'success'
        response['error_num'] = 0
    except Exception as e:
        response['msg'] = str(e)
        response['error_num'] = 1

    return JsonResponse(response)


def get_html(request):
    return render(request,'get.html')

Django 模型

模型是有关数据的唯一确定的信息源。它包含要存储数据的基本字段和行为。通常,每个模型都映射到单个数据库表。
每一个模型是django.db.models.Model的子类
每一个模型属性代表数据表的一个字段。
Django提供了自动生成的数据库访问API,使用模型操作数据库很方便

初始的超市数据库设计
from django.db import models

class Sainsbury(models.Model):
    Title = models.CharField(max_length=64)
    Title_link = models.CharField(max_length=250)
    value = models.CharField(max_length=64)
    value1 = models.CharField(max_length=64)
    weight = models.CharField(max_length=64)
    reviews = models.CharField(max_length=64)
    promotion = models.CharField(max_length=64)

    def __unicode__(self):
        return self.Title

class Morrison(models.Model):
    Title = models.CharField(max_length=64)
    Title_link = models.CharField(max_length=250)
    value = models.CharField(max_length=64)
    value1 = models.CharField(max_length=64)
    weight = models.CharField(max_length=64)
    reviews = models.CharField(max_length=64)
    promotion = models.CharField(max_length=64)

    def __unicode__(self):
        return self.Title

class Ocado(models.Model):
    Title = models.CharField(max_length=64)
    Title_link = models.CharField(max_length=250)
    value = models.CharField(max_length=64)
    value1 = models.CharField(max_length=64)
    weight = models.CharField(max_length=64)
    reviews = models.CharField(max_length=64)
    promotion = models.CharField(max_length=64)

    def __unicode__(self):
        return self.Title



class Waitrose(models.Model):
    Title = models.CharField(max_length=64)
    Title_link = models.CharField(max_length=250)
    value = models.CharField(max_length=64)
    value1 = models.CharField(max_length=64)
    weight = models.CharField(max_length=64)
    reviews = models.CharField(max_length=64)
    promotion = models.CharField(max_length=64)

    def __unicode__(self):
        return self.Title


class Tesco(models.Model):
    Title = models.CharField(max_length=64)
    Title_link = models.CharField(max_length=250)
    value = models.CharField(max_length=64)
    value1 = models.CharField(max_length=64)
    weight = models.CharField(max_length=64)
    reviews = models.CharField(max_length=64)
    promotion = models.CharField(max_length=64)

    def __unicode__(self):
        return self.Title
        ```

数据库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值