开始今日份整理,主要为stark组件的增删改以及model_form组件的使用以及form组件的回顾

1.list_display_link功能

功能:客制化字段进行跳转到指定的页面(编辑页面)

1.1 stark组件设置接口

1.2 app01中stark注册表中填写注册的内容

注意:该列表内对应的的字段需要和model中的属性名保持一致

1.3 stark中给普通属性增加a标签

if info_obj.choices:
vim = getattr(obj, 'get_%s_display' % field_or_info)()
else:
vim = getattr(obj, field_or_info)
if field_or_info in self.config_obj.list_display_link:
vim = mark_safe("<a href='%s'>%s</a>" % (self.config_obj.get_change_url(obj), vim))

效果图如下

既实现了反向解析也实现了编辑功能

2.form组件以及modelform组件

2.1 form组件回顾

2.1.1 form表单的功能

2.1.2 form表单的参数

2.1.3 form表单的一对多以及多对多样式

(1)一对多样式

(2)多对多样式

其他form组件调用,详情查看如下

2.2 modelform组件的学习

modelform组件的功能:可以减少form字段的使用,将model转换成form,不在用亲自写form组件。是form组件的进阶版本,可以更加高效的实现form组件的功能,在此基础上,还增加了数据渲染的功能,至此大大减少了代码的使用量。

展示如下:

form组件

modelform组件

2.2.1 modelform组件的增加界面

(1)views视图层

(2)路由层

(3)前端代码

(4)展示效果

2.2.2 modelform组件的修改

2.2.2.1 get请求

(1)视图层

(2)路由层

(3)前端代码

(4)展示

2.2.2.2 post请求部分

注意:修改信息虎,更新取决于后面是否有instance=对象这个属性,有才是更新,否则就是新增了

2.3 modelform在stark组件中的应用

2.3.1 创建modelform对象

供后面的内容使用,创建接口,供子类进行修改

2.3.2 子类重写

2.3.3 重写model_for_class

重写类似如下

步骤如下:

(1)导包

from django.forms import ModelForm  # 导入包

导入modelform,创建方法get_model_form

创建modelform 继承modelform 类,创建Meta 类(固定写法),供调用,model =self.model 传入当前操作的表对象, 默认的获取全部返回默认的类,如果有自定制的类则使用自定制类

(2)add_view视图函数

get请求:获取当前操作的表对象modelform类,实例化modelform获取渲染内容

post请求:modelform实例接收请求内容,判断内容是否符合要求。然后save()实例对象,会自动把内容添加到数据库中,否则,返回add界面

视图层:

前端代码:

<div class="container">
<div class="row">
<div class="col-md-6">
<form action="" method="post" novalidate>
{% csrf_token %} {% for field in form_obj %}
<div class="form-group">
<label for="">{{ field.label }}</label>
{{ field }} <span class="error pull-right">{{ field.errors.0 }}</span>
</div>
{% endfor %} <button class="btn btn-default">submit</button>
</form>
</div>
</div>
</div>

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<style>
input,select{
display: block;
width: 100%;
height: 34px;
padding: 6px 12px;
font-size: 14px;
line-height: 1.42857143;
color: #555;
background-color: #fff;
background-image: none;
border: 1px solid #ccc;
border-radius: 4px;
} .error{ color: red;
}
</style>
</head>
<body>
{% include "stark/form.html" %}
</body>
</html>

展示如下

(3)change_view更改视图

modelform 实例对象通过传入当前操作的实例对象进行渲染该对象的内容注意修改时要用instance=modelform的对象,可以进行渲染

前端代码,与add继承相同

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> <style>
input,select{
display: block;
width: 100%;
height: 34px;
padding: 6px 12px;
font-size: 14px;
line-height: 1.42857143;
color: #555;
background-color: #fff;
background-image: none;
border: 1px solid #ccc;
border-radius: 4px;
} .error{
color: red;
}
</style>
</head>
<body>
{% include "stark/form.html" %}
</body>
</html>

展示如下:

(4)delete_view删除数据视图

也是通过反向解析获取id,直接通过pk主键删除对象,然后跳转展示界面

前端代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> </head>
<body>
<form action="" method="post">
{% csrf_token %}
<a href="{{list_url}}" class="btn btn-warning">取消</a>
<input type="submit" class="btn btn-danger" value="确认删除">
</form>
</body>
</html>

展示如下:

a

Django-CRM项目学习(三)-stark的页面展示的更多相关文章

  1. Spring Boot 项目学习 (三) Spring Boot + Redis 搭建

    0 引言 本文主要介绍 Spring Boot 中 Redis 的配置和基本使用. 1 配置 Redis 1. 修改pom.xml,添加Redis依赖 <!-- Spring Boot Redi ...

  2. django——CRM项目

    1.引言 CRM,客户关系管理系统(Customer Relationship Management).企业用CRM技术来管理与客户之间的关系,以求提升企业成功的管理方式,其目的是协助企业管理销售循环 ...

  3. Django - CRM项目(2)Q查询(模糊查询)

    一.CRM项目(2) 利用Q查询中的q对象完成条件筛选功能. 批量删除.公户转私户功能. 新增一张跟进记录表ConsultRecord,迁移数据库并添加测试数据,实现跟进记录列表页面. 客户列表新增跟 ...

  4. Django - CRM项目(3)

    一.CRM项目的业务逻辑与表结构梳理 1.分析业务逻辑 (1) 引流(sem) (2) 网络咨询师(客服):添加客户信息和查看客户,分配销售 (3) 销售:查看私户 添加跟进记录 失败:加入公户 成功 ...

  5. Django ---- blog项目学习所得

    一.登录功能 1.采用ajax 提交form表单的方式 2.后台生成随机验证码,登录时提交验证码 3.用PLI库生成随机验证码,置于session中,登录时与前台提交的code进行upeer()的验证 ...

  6. Js之Dom学习-三种获取页面元素的方式、事件、innerText和innerHTML的异同

    一.三种获取页面元素的方式: getElementById:通过id来获取 <body> <input type="text" value="请输入一个 ...

  7. WPF项目学习.三

    工具代码记录 版权声明:本文为博主初学经验,未经博主允许不得转载. 一.前言 记录在学习与制作WPF过程中遇到的解决方案. 分页控件的制作,邮件发送,日志代码,excel导入导出等代码的实现过程: 二 ...

  8. 【音乐App】—— Vue-music 项目学习笔记:搜索页面开发

    前言:以下内容均为学习慕课网高级实战课程的实践爬坑笔记. 项目github地址:https://github.com/66Web/ljq_vue_music,欢迎Star. 搜索歌手歌曲 搜索历史保存 ...

  9. 【音乐App】—— Vue-music 项目学习笔记:歌手页面开发

    前言:以下内容均为学习慕课网高级实战课程的实践爬坑笔记. 项目github地址:https://github.com/66Web/ljq_vue_music,欢迎Star. 一.歌手页面布局与设计 需 ...

随机推荐

  1. Python模块查找路径

    在编写Python程序时候命名在IDE中运行正常可是到了服务器上就出现各种问题,经常发生的就是如下的错误: ImportError: No module named 'hello' 这个错误我相信大家 ...

  2. 翻译 异步I/O不会创建新的线程

    异步I/O不会创建新的线程 本文翻译自 Stephen Cleary 的 [There is No Thread] 原文地址 https://blog.stephencleary.com/2013/1 ...

  3. Asp.Net SignalR 多平台的Client与Server

    多平台 SignalR在.Net的大环境下都可以做到即时通讯,也就是说都可以使用,客户端也不仅是js.下面就来一个控制台的Client 我们需要在nuget上下载包 Microsoft.AspNet. ...

  4. 基于IdentityServer4 实现.NET Core的认证授权

    IdentityServer4是什么? IdentityServer4是基于ASP.NET Core实现的认证和授权框架,是对OpenID Connect和OAuth 2.0协议的实现. OpenID ...

  5. .NET Core中Object Pool的简单使用

    前言 复用,是一个重要的话题,也是我们日常开发中经常遇到的,不可避免的问题. 举个最为简单,大家最为熟悉的例子,数据库连接池,就是复用数据库连接. 那么复用的意义在那里呢? 简单来说就是减少不必要的资 ...

  6. C# 设置Excel超链接(二)

    简介 超链接能够快速地将当前文本或图片链接到指定目标地址,在日常办公中给我们提供了极大的便利.本文将介绍在C#语言中如何通过免费版组件对Excel表格添加超链接,示例中将包含以下要点: 1.添加链接到 ...

  7. Java小工具 根据文本批量修改文件名

    功能 可以根据使用路径修改文件名,已经测试,可以成功运行 思路 先是读取到txt文本文件,之后使用String的spilt进行分割,每一行的格式为 旧名字 新名字,中间的空格可以使用|或者其他字符代替 ...

  8. 设计模式之代理模式(Proxy)(2)

    代理模式是为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用,其特征是代理类与委托类有同样的接口. ...

  9. 原生js获取元素非行内样式属性的方法

    获取当前对象的样式DOM标准中的全局方法 getComputedStyle(obj).width (获取元素的宽度),但在非标准IE浏览器(IE8)以下有兼容问题IE8以下要这样写 obj.curre ...

  10. 利用efi功能更改bios主板被隐藏的设置(如超频)

    整理自(来源): http://tieba.baidu.com/p/4934345324 ([新手教程]利用EFI启动盘修改 隐藏bios设置) http://tieba.baidu.com/p/49 ...