当前位置: 首页 > news >正文

物流公司网站建设方案百度搜索风云榜下载

物流公司网站建设方案,百度搜索风云榜下载,怎样网页制作,网上兼职打字员网站模型层补充 MTV与MVC模型 MTV 全称 Models Templates Views 模型模板视图 MVC 全称 Models Views Controller 模型视图控制MTV: Django号称是MTV模型 MVC: 其实django本质也是MVC 拓展: vue框架:MVVM模型choices参数(数据库字段设计常见) choices使用 class User(models.Mod…

模型层补充

MTV与MVC模型

'''
MTV 全称 Models Templates Views  模型模板视图
MVC 全称 Models Views Controller 模型视图控制MTV: Django号称是MTV模型
MVC: 其实django本质也是MVC
拓展: vue框架:MVVM模型
'''

choices参数(数据库字段设计常见)

choices使用

class User(models.Model):username = models.CharField(max_length=32)age = models.IntegerField()"""作用: 针对可以被预测到结果的字段对应的数据, 那么可以为该字段定制choices参数, 取数据的时候就可以通过`对象.get_设置choices的字段_display()`获取到定制的数据.例如:  性别 学历 工作经验 是否结婚 是否生子 客户来源等等. 针对某个可以列举完全的可能性字段我们用choices存储.使用: 1. 为即将创建的字段定制choices参数. 参数是一个二元组的形式 ((), ()). 元组中第一个参数要满足存储字段的约束条件2. 存: 指定对设置了choices的字段存数据数据存得时候没有列举出来的数字也能存. 范围还是按照字段类型决定3. 取: 指定对设置了choices的字段取数据.  方法: 对象.get_设置choices的字段_display()如果取得时候如果没有对应关系 那么字段是什么还是展示什么"""# 性别gender_choices = ((0, '女'),(1, '男'),(2, '其他'),)gender = models.IntegerField(choices=gender_choices)# 成绩score_choices = (('A', '优秀'),('B', '良好'),('C', '及格'),('D', '不合格'),)# 保证字段类型跟列举出来的元祖第一个数据类型一致即可score = models.CharField(choices=score_choices, null=True)user_obj1 = models.User.objects.create(username='jason', age=18, gender=1)
models.User.objects.create(username='egon', age=85, gender=2)
models.User.objects.create(username='tank', age=40, gender=3)
# 存: 存的时候 没有列举出来的数字也能存(范围还是按照字段类型决定)
user_obj4 = models.User.objects.create(username='tony', age=45, gender=4)# 取: 只要是choices参数的字段 如果你想要获取对应信息 固定写法 get_字段名_display()
print(user_obj1.get_gender_display())  # 男
print(user_obj4.get_gender_display())  # 4 (如果没有对应关系 那么字段是什么还是展示什么)

多对多三种创建方式

1. 全自动

'''
优点: 1. 第三张表以及对应的外键关联字段不需要书写.2. 可以使用ORM提供的多对多关系表之间的增删改查清空方法remove,add,set,clear和正反向+双下划线查询
缺点: 可扩展性极差. 无法对ORM自动生成的第三种虚拟中间表进行增添字段的操作     
'''
class Book(models.Model):name = models.CharField(max_length=32)book = models.ManyToManyField(to='Author')class Author(models.Model):name = models.CharField(max_length=32)

2. 纯手动

'''
优点: 可扩展性强: 第三张表完全取决于自己 
缺点: 需要书写的代码量大. 并且ORM提供的多对多关系的增删改查清空方法, 以及正反向+双下划线查询都不支持一律都不能使用.
'''
class Book(models.Model):name = models.CharField(max_length=32)class Author(models.Model):name = models.CharField(max_length=32)class Book2Author(models.Model):book = models.ForeignKey(to='Book')        author = models.ForeignKey(to='Author') 

3. 半自动

'''
优点: 既可以对第三张表进行格外增添字段的操作, 又能使用ORM提供的正反向+双下划线查询
缺点: 不能使用ORM提供的多对多表关系增删改清空方法. add, set, remove, clearManyToManyField中参数指定介绍: to: 需要建立多对多外键关系的表. 本来需要指定to_field, 但是默认关联的就是被关联表的主键, 因此不需要指定.through: 建立多对多关系的第三张表through_fields: 指定元组形式注意: 参数的指定有顺序判断顺序指定的本质: 通过第三张表反向查对应建立多对多外键关联的表需要用到的哪个字段 哪个字段就放在前面简化: 谁是建立多对多外键关联的表, 就把对应的关联字段放前面            
'''
class Book(models.Model):name = models.CharField(max_length=32)authors = models.ManyToManyField(to='Author',through='Book2Author',through_fields=('book', 'author'))class Author(models.Model):name = models.CharField(max_length=32)# books = models.ManyToManyField(#     to='Book',#     through='Book2Author',#     through_fields=('author', 'book'))class Book2Author(models.Model):book = models.ForeignKey(to='Book')author = models.ForeignKey(to='Author')

Ajax

Ajax简介

1. 简介

'''
AJAX 全称 Asynchronous JavaScript and XML 异步JavaScript和XML
特点是: 异步提交. 局部刷新
例如: github注册页面动态获取用户名实时的跟后端确认并实时展示的前端(局部刷新)    1. AJAX 不是新的编程语言,而是一种使用现有标准的新方法(比较装饰器)
2. AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。(这一特点给用户的感受是在不知不觉中完成请求和响应过程)
3. 注意: Ajax我们只争对jQuery封装之后的版本(原生的复杂并且在实际项目中也一般不用)
补充: 并不只有jQuery能够实现ajax,其他的框架也可以 但是换汤不换药 原理是一样的
'''

2. 前端朝后端发送请求的方式

'''
1. 浏览器地址栏直接输入url回车       GET请求
2. a标签href属性                   GET请求
3. form表单(:submit 和 button)     GET请求/POST请求
4. ajax                           GET请求/POST请求
'''

Ajax常见应用情景

# 需求
'''
1. 页面上有三个input框
2. 在前两个框中输入数字 点击按钮 朝后端发送ajax请求
3. 后端计算出结果 再返回给前端动态展示的到第三个input框中
强调: 整个过程页面不准有刷新,也不能在前端计算
'''

1. 前端: templates下的ab_ajax.html

<body>
<input type="text" id="d1"> +
<input type="text" id="d2"> =
<input type="text" id="d3">
<p><button class="btn btn-success btn-xs">点我</button>
</p><script>$(".btn").click(function () {// 1. 朝后端发送ajax请求$.ajax({// 2.指定朝哪个后端发送ajax请求url: '',       // 不写就是朝当前地址提交// 2.请求方式type: 'post',  // 不指定默认就是get 都是小写// 3.数据data: {'d1': $("#d1").val(), 'd2': $("#d2").val()},// 4.自动将接收到后端的string类型的json格式, 反序列化转换成对象. 如果后端指定使用JsonResponse返回数据. 那么就无需指定.{#dataType: 'json',#}// 5.回调函数:当后端给你返回结果的时候会自动触发 args接受后端的返回结果success: function (args) {// 6. 通过DOM操作动态渲染到第三个input里面$("#d3").val(args);console.log(typeof args);},})})
</script>
</body>

2. 后端: views.py

# 提示: 因为ajax指定的是post提交方式, 我们需要到settings.py中注释掉MIDDLEWARE中的csrf那一行. 如果没有注释前端将会出现如下异常: 
'''
Failed to load resource: the server responded with a status of 403 (Forbidden)加载资源失败:服务器响应状态为403(禁止)
'''def ab_ajax(request):if request.method == "POST":# 1. 使用HttpResponse返回数据. 实现后端计算出结果 再返回给前端动态展示的到第三个input框中'''d1 = request.POST.get('d1')d2 = request.POST.get('d2')sum = int(d1) + int(d2)return HttpResponse(sum)'''# 2. 使用HttpResponse返回数据. 传字典格式需要使用jason序列化. ajax中指定dataType:'json'设置自动反序列化. 如果前端页面手动指定反序列化需要使用JSON.parse. 如果没有指定是string类型, 而不是一个对象.'''import jsonusername = {'username': 'jason', 'password': '123'}return HttpResponse(json.dumps(username))'''# 3. 使用JsonResponse返回数据. 前端无需反序列化. 可以直接拿到数据对象from django.http import JsonResponseusername = {'username': 'jason', 'password': '123'}return JsonResponse(username)return render(request, 'ab_ajax.html')
http://www.hengruixuexiao.com/news/46532.html

相关文章:

  • 网站网站地图怎么做百度网页入口
  • php手机网站后台源码广州网站建设技术外包
  • 网站建设公司测评疫情最新数据消息
  • 网站建设服务合同是否缴纳印花税培训网站设计
  • 虐做视频网站重庆疫情最新消息
  • 网站源代码查看html网页制作步骤
  • 桂林哪里可以做网站windows优化工具
  • 编程scratch网站西安网站制作费用
  • 国内 设计网站的公司网站深圳网络推广专员
  • 广州网站建设第一公司如何找推广平台
  • 做网站如何上传apk推广一个产品有哪些方式
  • 设计服务网站牛奶推广软文文章
  • b2b商务平台排名seo软件
  • 北京企业展示网站建设不要手贱搜这15个关键词
  • 做视频网站弹窗百度打广告怎么收费
  • 百度上开个网站怎么做网络推广的好处
  • 可靠的微商城网站建设深圳货拉拉
  • 打开网站代码怎么写提高工作效率图片
  • 行业门户网站的优化怎么做yps行业门户系统信息流广告公司排名
  • 河北省住房城乡建设局网站首页培训机构在哪个平台找
  • 中牟郑州网站建设咸阳网站建设公司
  • 做网站好还是小程序好网站标题seo外包优化
  • 用asp.net做的网站模板下载成都百度业务员电话
  • 北京做网站建设价格百度客服中心人工在线咨询
  • 淄博英文网站建设google chrome
  • 网站制作信息网络营销推广的总结
  • 厦门 网站优化搜狗收录查询
  • 上海模板网站公司企业网站建设哪家好
  • 明年做哪个网站致富seo站长网
  • php建站模板浏览器下载