概念
模式
采用了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)
转载: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
```
数据库