wordpress子域名站点求个网站没封的2021

pingmian/2025/10/9 12:45:54/文章来源:
wordpress子域名站点,求个网站没封的2021,泰安企业建站公司流程,网站游戏网站怎么自己做名人说#xff1a;莫道桑榆晚#xff0c;为霞尚满天。——刘禹锡#xff08;刘梦得#xff0c;诗豪#xff09; 创作者#xff1a;Code_流苏(CSDN)#xff08;一个喜欢古诗词和编程的Coder#x1f60a;#xff09; 目录 1、Ajax入门①简介②工作原理③优点④缺点⑤使用… 名人说莫道桑榆晚为霞尚满天。——刘禹锡刘梦得诗豪 创作者Code_流苏(CSDN)一个喜欢古诗词和编程的Coder 目录 1、Ajax入门①简介②工作原理③优点④缺点⑤使用 2、GET/POST与Ajax请求①GET/POST②Ajax③GET请求④POST请求 3、返回值①以json的方式返回数据②补充json③后台接收输入框内容 4、Ajax案例任务管理①任务添加一②任务添加二③数据保存及校验 1、Ajax入门 ①简介 AJAX全称为Asynchronous JavaScript and XML异步的JavaScript和XML是一种在无需重新加载整个网页的情况下能够更新部分网页的技术。通过在后台与服务器进行少量数据交换AJAX可以使网页实现异步更新。这意味着可以在页面不进行全面刷新的情况下更新其部分内容。这样不仅可以减少数据传输量还能提高网页的交互性。 ②工作原理 AJAX的工作原理基于以下几个关键技术 XMLHttpRequest对象XHR负责与服务器异步交换数据。通过这个对象发送请求并接收响应开发者可以在不重新加载页面的情况下更新网页的某一部分。JavaScript/DOM用于动态显示和交互。CSS用于定义数据的样式。XML曾经是数据交换的主要格式但现在JSON格式因为其轻量和易于解析的特性已经成为更受欢迎的数据交换格式。 ③优点 提高用户体验通过局部刷新页面内容减少等待时间和服务器响应时间从而提高用户体验。减轻服务器负担仅请求必要的数据而不是整个页面的数据减少了带宽的使用和服务器的负担。支持异步通信页面可以在等待服务器响应的同时继续处理其他事务提高了应用程序的效率。 ④缺点 SEO问题由于AJAX加载的内容可能不会被搜索引擎爬虫抓取因此可能影响页面的SEO。兼容性问题虽然现代浏览器都支持AJAX但在一些旧浏览器中可能存在兼容性问题。安全问题由于AJAX涉及到异步数据交换可能会引入跨站脚本攻击XSS等安全问题。 ⑤使用 一个简单的AJAX使用示例假设我们想异步从服务器获取一些数据并在网页上显示这些数据可以使用以下JavaScript代码 var xhr new XMLHttpRequest(); // 创建XMLHttpRequest对象 xhr.open(GET, server.php, true); // 配置请求类型、URL及异步处理方式 xhr.onreadystatechange function() { // 设定回调函数if (xhr.readyState 4 xhr.status 200) {document.getElementById(myDiv).innerHTML xhr.responseText; // 处理服务器响应} }; xhr.send(); // 发送请求这段代码演示了如何创建XMLHttpRequest对象配置请求并在收到服务器响应后更新页面元素内容。 Ajax技术自从2005年被广泛推广以来已经成为现代网页开发不可或缺的一部分。尽管它存在一些缺点和挑战但其对于提升用户体验和页面性能的贡献是毋庸置疑的。随着Web技术的不断发展AJAX也在不断进化配合现代前端框架和库如React、Vue、Angular能够构建出更加动态和交互流畅的网页应用。 2、GET/POST与Ajax请求 ①GET/POST 浏览器向网站发送请求时URL和表单的形式提交的两种请求方法GET和POST它们是两种常用的HTTP请求方法用于在客户端和服务器之间传输数据。 GET方法 用于请求从指定的资源获取数据。使用GET请求时请求的参数会附加在URL之后以?分隔URL和传输数据参数之间以连接。例如http://example.com/index?name1value1name2value2。GET请求通常用于请求页面、图片或者进行查询操作它的特点是简单且无副作用但是由于参数直接暴露在URL中所以不适合传输敏感信息。 POST方法 用于向指定的资源提交要被处理的数据。与GET方法不同POST方法的数据不会附加在URL之后而是放在HTTP请求的正文body中。这意味着数据的大小和类型都没有GET那么严格的限制同时也更加安全因为数据不会直接暴露在URL中。POST请求常用于提交表单数据、上传文件等需要“写”操作的场景。 在Python中可以使用多种方式发起GET和POST请求最常见的库之一是requests库。以下是使用requests库发起GET和POST请求的基本示例 GET请求示例 import requestsresponse requests.get(http://example.com/api/data?name1value1name2value2) print(response.text) # 打印响应内容POST请求示例 import requestsdata {name1: value1, name2: value2} response requests.post(http://example.com/api/data, datadata) print(response.text) # 打印响应内容需要注意的是为了安全起见敏感信息应避免通过GET请求传输而应选择POST请求。此外使用这些请求方法时应该考虑到HTTP协议的特点和限制。 特点页面刷新 ②Ajax 与上述两种方式对比Ajax可以实现向后台悄悄地发送请求。 依赖jQuery编写Ajax代码 $.ajax({url:发送的地址,type:get,data:{n1:123,n2:456},success:function(res){console.log(res);} })③GET请求 1.在urls.py中添加任务列表的路径task/list/以及task/ajax/并告诉该路径指向的视图task_list from django.urls import path from api.views import depart, user, pretty, admin, account, taskurlpatterns [# 部门管理path(depart/list/, depart.depart_list),path(depart/add/, depart.depart_add),path(depart/delete/, depart.depart_delete),path(depart/int:nid/edit/, depart.depart_edit),# 用户管理path(user/list/, user.user_list),path(user/add/, user.user_add),path(user/model/form/add/, user.user_model_form_add),path(user/int:nid/edit/, user.user_edit),path(user/int:nid/delete/, user.user_delete),# 靓号管理path(pretty/list/, pretty.pretty_list),path(pretty/add/, pretty.pretty_add),path(pretty/int:nid/edit/, pretty.pretty_edit),path(pretty/int:nid/delete/, pretty.pretty_delete),# 管理员管理path(admin/list/, admin.admin_list),path(admin/add/, admin.admin_add),path(admin/int:nid/edit/, admin.admin_edit),path(admin/int:nid/delete/, admin.admin_delete),path(admin/int:nid/reset/, admin.admin_reset),# 用户登录path(login/, account.login),path(logout/, account.logout),path(image/code/, account.image_code),# 任务管理path(task/list/,task.task_list),path(task/ajax/,task.task_ajax), ]2.在views文件夹下新建task.py并在task.py中写出对应的函数发出请求并返回响应task_list.html task.py from django.shortcuts import render,HttpResponsedef task_list(request):return render(request,task_list.html)def task_ajax(request):print(request.GET)return HttpResponse(成功了)3.创建templates目录下模版html文件task_list.html以此呈现做任务列表的界面。 task_list.html {% extends layout.html %}{% block content %}div classcontainerh1任务管理/h1h3示例1/h3input typebutton value点击 classbtn btn-primary onclickclickMe();/div {% endblock %}{% block script %}script typetext/javascriptfunction clickMe() {$.ajax({url: /task/ajax/,type: get,data: {n1:123,n2:456},success: function(res) {console.log(res);}})}/script {% endblock %}效果 按F12打开调试页面可以看到成功了。 ④POST请求 1.在urls.py中添加任务列表的路径task/list/以及task/ajax/并告诉该路径指向的视图task_list from django.urls import path from api.views import depart, user, pretty, admin, account, taskurlpatterns [# 部门管理path(depart/list/, depart.depart_list),path(depart/add/, depart.depart_add),path(depart/delete/, depart.depart_delete),path(depart/int:nid/edit/, depart.depart_edit),# 用户管理path(user/list/, user.user_list),path(user/add/, user.user_add),path(user/model/form/add/, user.user_model_form_add),path(user/int:nid/edit/, user.user_edit),path(user/int:nid/delete/, user.user_delete),# 靓号管理path(pretty/list/, pretty.pretty_list),path(pretty/add/, pretty.pretty_add),path(pretty/int:nid/edit/, pretty.pretty_edit),path(pretty/int:nid/delete/, pretty.pretty_delete),# 管理员管理path(admin/list/, admin.admin_list),path(admin/add/, admin.admin_add),path(admin/int:nid/edit/, admin.admin_edit),path(admin/int:nid/delete/, admin.admin_delete),path(admin/int:nid/reset/, admin.admin_reset),# 用户登录path(login/, account.login),path(logout/, account.logout),path(image/code/, account.image_code),# 任务管理path(task/list/,task.task_list),path(task/ajax/,task.task_ajax), ]2.在views文件夹下新建task.py并在task.py中写出对应的函数发出请求并返回响应task_list.html task.py from django.shortcuts import render,HttpResponsedef task_list(request):return render(request,task_list.html)def task_ajax(request):print(request.GET)return HttpResponse(成功了)3.创建templates目录下模版html文件task_list.html以此呈现做任务列表的界面。 task_list.html {% extends layout.html %}{% block content %}div classcontainerh1任务管理/h1h3示例1/h3input typebutton value点击 classbtn btn-primary onclickclickMe();/div {% endblock %}{% block script %}script typetext/javascriptfunction clickMe() {$.ajax({url: /task/ajax/,type: get,data: {n1:123,n2:456},success: function(res) {console.log(res);}})}/script {% endblock %}效果 后台输出 优化上面的Ajax代码绑定事件使其能够在页面框架加载完成之后自动执行代码。 {% extends layout.html %}{% block content %}div classcontainerh1任务管理/h1h3示例1/h3input idbtn1 typebutton value点击 classbtn btn-primary /div{% endblock %}{% block script %} script typetext/javascript$(function () {// 页面框架加载完成之后代码自动执行bindBtn1Event();})function bindBtn1Event() {$(#btn1).click(function () {$.ajax({url: /task/ajax/,type: post,data: {n1: 123,n2: 456},success: function (res) {console.log(res);}})})} /script {% endblock %}3、返回值 ①以json的方式返回数据 修改前端task_list.html中的bindBtn1Event()函数。 function bindBtn1Event() {$(#btn1).click(function () {$.ajax({url: /task/ajax/,type: post,data: {n1: 123,n2: 456},{#修改1#}dataType: JSON,success: function (res) {console.log(res);{#修改2#}console.log(res.status);console.log(res.data);}})}) }修改后端 import json from django.shortcuts import render, HttpResponse from django.http import JsonResponse from django.views.decorators.csrf import csrf_exemptdef task_list(request):return render(request, task_list.html)csrf_exempt def task_ajax(request):print(get请求, request.GET)print(POST请求, request.POST)data_dict {status: True, data: [11, 22, 33, 44]}return HttpResponse(json.dumps(data_dict))效果 到了这里可能会有疑问json数据什么是json ②补充json JSONJavaScript Object Notation是一种轻量级的数据交换格式它易于人阅读和编写同时也易于机器解析和生成。JSON格式是独立于语言的尽管它是由JavaScript的对象字面量语法派生而来的但是JSON格式的数据可以由多种语言读取如Python、Ruby、PHP等。 1.JSON的结构 JSON格式支持两种结构 键/值对集合在各种语言中这被实现为对象、记录、结构、字典、哈希表、有键列表或者关联数组。有序的值列表在大多数语言中这被实现为数组、向量、列表或序列。 JSON的基本类型包括数字整数或浮点数、字符串在双引号中、布尔值true或false、数组在方括号中、对象在大括号中的键/值对和null。 2.JSON示例 以下是一个简单的JSON对象示例它描述了一个人的信息 {name: 张三,age: 30,isStudent: false,hobbies: [旅游, 摄影],address: {street: 科技园路.,city: 深圳,postalCode: 518057} }在这个例子中我们可以看到字符串、数字、布尔值、数组和嵌套对象的使用。 3.在Python中使用JSON 在Python中可以使用json模块来解析JSON字符串和生成JSON格式的字符串。以下是一些基本的操作 解析JSON字符串 import json# JSON字符串 json_str {name: 张三, age: 30, isStudent: false}# 解析JSON字符串 data json.loads(json_str)# 使用数据 print(data[name]) # 输出张三生成JSON字符串 import json# Python字典 data {name: 李四,age: 25,isStudent: True }# 生成JSON格式的字符串 json_str json.dumps(data, ensure_asciiFalse)print(json_str) # 输出{name: 李四, age: 25, isStudent: true}关于json.dumps json.dumps 是Python中的一个函数属于 json 模块。它用于将Python对象编码成JSON格式的字符串。 具体来说json.dumps函数接受Python的数据类型如字典、列表、字符串等并将其转换为一个字符串这个字符串表示相同数据的JSON格式。这对于数据存储、网络传输等场景非常有用。 举个例子 import jsondata {name: 张三, age: 30, city: 北京} json_str json.dumps(data, ensure_asciiFalse)print(json_str)这段代码会输出 {name: 张三, age: 30, city: 北京}在这个例子中 import json 引入了 json 模块使得 json.dumps 函数可用。data 是一个Python字典包含了一些键值对。json.dumps(data, ensure_asciiFalse) 调用了 json.dumps 函数将 data 转换成了JSON格式的字符串。ensure_asciiFalse 参数指示 json.dumps 使用UTF-8编码这样可以正确显示中文而不是Unicode编码。 这样Python中的数据就可以被转换为JSON字符串便于存储或在网络中传输。 ③后台接收输入框内容 1.修改task_list.html task_list.html {% extends layout.html %}{% block content %}div classcontainerh1任务管理/h1h3示例1/h3input idbtn1 typebutton value点击 classbtn btn-primaryh3示例2/h3input typetext idtxtuser placeholder姓名input typetext idtxtpwd placeholder密码input idbtn2 typebutton value点击 classbtn btn-primary/div{% endblock %}{% block script %} script typetext/javascript$(function () {// 页面框架加载完成之后代码自动执行bindBtn1Event();bindBtn2Event();})function bindBtn1Event() {$(#btn1).click(function () {$.ajax({url: /task/ajax/,type: post,data: {n1: 123,n2: 456},dataType: JSON,success: function (res) {console.log(res);console.log(res.status);console.log(res.data);}})}) }function bindBtn2Event() {$(#btn2).click(function () {$.ajax({url: /task/ajax/,type: post,data: {name: $(#txtuser).val(),password: $(#txtpwd).val()},dataType: JSON,success: function (res) {console.log(res);console.log(res.status);console.log(res.data);}})})} /script {% endblock %}效果 这样是实现了但是如果前端代码过多的话又该怎么办呢此时我们就需要用更简单的方法来进行批量处理了。 2.再次修改task_list.html task_list.html {% extends layout.html %}{% block content %}div classcontainerh1任务管理/h1h3示例1/h3input idbtn1 typebutton value点击1 classbtn btn-primaryh3示例2/h3input typetext idtxtuser placeholder姓名input typetext idtxtpwd placeholder密码input idbtn2 typebutton value点击2 classbtn btn-primaryform idfrom3h3示例3/h3input typetext nameuser placeholder姓名input typetext nameage placeholder年龄input typetext namepwd placeholder密码input typetext namemobile placeholder电话/forminput idbtn3 typebutton value点击3 classbtn btn-primary/div{% endblock %}{% block script %} script typetext/javascript$(function () {// 页面框架加载完成之后代码自动执行bindBtn1Event();bindBtn2Event();bindBtn3Event();})function bindBtn1Event() {$(#btn1).click(function () {$.ajax({url: /task/ajax/,type: post,data: {n1: 123,n2: 456},dataType: JSON,success: function (res) {console.log(res);console.log(res.status);console.log(res.data);}})})}function bindBtn2Event() {$(#btn2).click(function () {$.ajax({url: /task/ajax/,type: post,data: {name: $(#txtuser).val(),password: $(#txtpwd).val()},dataType: JSON,success: function (res) {console.log(res);console.log(res.status);console.log(res.data);}})})}function bindBtn3Event() {$(#btn3).click(function () {$.ajax({url: /task/ajax/,type: post,data: $(#from3).serialize(),dataType: JSON,success: function (res) {console.log(res);console.log(res.status);console.log(res.data);}})})} /script {% endblock %}效果 至此如何在浏览器不刷新的情况下向后台提交数据的问题也就解决了。 4、Ajax案例任务管理 ①任务添加一 1.在models.py中创建任务Task表。 models.py class Task(models.Model):任务level_choices ((1, 紧急),(2, 重要),(3, 临时),)level models.SmallIntegerField(verbose_name级别, choiceslevel_choices, default1)title models.CharField(verbose_name标题, max_length64)detail models.TextField(verbose_name详细信息)user models.ForeignKey(verbose_name负责人, toAdmin, on_deletemodels.CASCADE)之后更新数据库表 python manage.py makemigrations python manage.py migrate经过上述命令之后可以看到task表已经添加完成。 启动Django项目的开发服务器方便测试Django搭建的系统 python manage.py runserver具体来讲 python 是启动Python解释器的命令。manage.py 是Django项目中的一个脚本用于执行项目相关的各种命令。runserver 是传递给 manage.py 的一个参数它指示Django启动一个轻量级的Web服务器用于开发和测试。 默认情况下该服务器运行在本地的8000端口http://127.0.0.1:8000/但你可以通过添加端口号来改变它例如 runserver 8080 会让服务器运行在8080端口。 2.修改task.py task.py from employee_management.utils.modelform import BootStrapModelForm from employee_management.models import Taskclass TaskModelForm(BootStrapModelForm):class Meta:model Taskfields __all__csrf_exempt def task_list(request):form TaskModelForm()return render(request, task_list.html, {form: form})3.修改task_list.html task_list.html {% extends layout.html %}{% block content %}div classcontainerdiv classpanel panel-defaultdiv classpanel-heading表单/divdiv classpanel-bodyform methodpost novalidate{% for item in form %}div classform-grouplabel{{ item.label }}/label{{ item }}/div{% endfor %}/form/div/divh1任务管理/h1h3示例1/h3input idbtn1 typebutton value点击1 classbtn btn-primaryh3示例2/h3input typetext idtxtuser placeholder姓名input typetext idtxtpwd placeholder密码input idbtn2 typebutton value点击2 classbtn btn-primaryform idfrom3h3示例3/h3input typetext nameuser placeholder姓名input typetext nameage placeholder年龄input typetext namepwd placeholder密码input typetext namemobile placeholder电话/forminput idbtn3 typebutton value点击3 classbtn btn-primary/div{% endblock %}{% block script %}script typetext/javascript$(function () {// 页面框架加载完成之后代码自动执行bindBtn1Event();bindBtn2Event();bindBtn3Event();})function bindBtn1Event() {$(#btn1).click(function () {$.ajax({url: /task/ajax/,type: post,data: {n1: 123,n2: 456},dataType: JSON,success: function (res) {console.log(res);console.log(res.status);console.log(res.data);}})})}function bindBtn2Event() {$(#btn2).click(function () {$.ajax({url: /task/ajax/,type: post,data: {name: $(#txtuser).val(),password: $(#txtpwd).val()},dataType: JSON,success: function (res) {console.log(res);console.log(res.status);console.log(res.data);}})})}function bindBtn3Event() {$(#btn3).click(function () {$.ajax({url: /task/ajax/,type: post,data: $(#from3).serialize(),dataType: JSON,success: function (res) {console.log(res);console.log(res.status);console.log(res.data);}})})}/script {% endblock %}其实到这里 虽然界面已经出来了但是这个界面占整个页面的篇幅太大了因此我们要优化一下前端的展示页面以使整体更加和谐。 4.修改task_list.html 注意下面前端代码里的button必须放在form表单外否则submit的ajax触发机制不会生效。 原因如下 在HTML中如果将button标签放置在form标签内部并且没有指定type属性或将type属性设为submit当按钮被点击时默认触发表单的提交。如果你希望使用button进行AJAX操作而不提交表单你有两种选择 将button标签放置在form标签之外。在form标签内部使用button标签但要将button的type属性设置为button。 例如 !-- 将button放在form外面 -- button idajaxButtonAJAX 请求按钮/button form idmyForm!-- 表单内容 -- /form!-- 或者在form内部将button类型设为button -- form idmyForm!-- 表单内容 --button typebutton idajaxButtonAJAX 请求按钮/button /form在这种情况下即使button位于form内部由于其类型被设置为button点击时不会触发表单的提交。这样你就可以绑定AJAX调用到这个按钮上而不干扰表单的正常提交逻辑。 task_list.html {% extends layout.html %}{% block content %}div classcontainerdiv classpanel panel-defaultdiv classpanel-heading表单/divdiv classpanel-bodyform methodpost idtask_form novalidatediv{% for item in form %}div classcol-xs-6div classform-grouplabel{{ item.label }}/label{{ item }}/div/div{% endfor %}/div/formdiv classcol-xs-12input idsubmit typesubmit value提 交 classbtn btn-primary center-block stylewidth: 100px;/div/div/divh1任务管理/h1h3示例1/h3input idbtn1 typebutton value点击1 classbtn btn-primaryh3示例2/h3input typetext idtxtuser placeholder姓名input typetext idtxtpwd placeholder密码input idbtn2 typebutton value点击2 classbtn btn-primaryform idfrom3h3示例2/h3input typetext nameuser placeholder姓名input typetext nameage placeholder年龄input typetext namepwd placeholder密码input typetext namemobile placeholder电话/forminput idbtn3 typebutton value点击3 classbtn btn-primary/div{% endblock %}{% block script %} script typetext/javascript$(function () {// 页面框架加载完成之后代码自动执行bindBtn1Event();bindBtn2Event();bindBtn3Event();bindaddEvent();})function bindBtn1Event() {$(#btn1).click(function () {$.ajax({url: /task/ajax/,type: post,data: {n1: 123,n2: 456},dataType: JSON,success: function (res) {console.log(res);console.log(res.status);console.log(res.data);}})})}function bindBtn2Event() {$(#btn2).click(function () {$.ajax({url: /task/ajax/,type: post,data: {name: $(#txtuser).val(),password: $(#txtpwd).val()},dataType: JSON,success: function (res) {console.log(res);console.log(res.status);console.log(res.data);}})})}function bindBtn3Event() {$(#btn3).click(function () {$.ajax({url: /task/ajax/,type: post,data: $(#from3).serialize(),dataType: JSON,success: function (res) {console.log(res);console.log(res.status);console.log(res.data);}})})}function bindaddEvent() {$(#submit).click(function () {$.ajax({url: /task/add/,type: post,data: $(#task_form).serialize(),dataType: JSON,success: function (res) {console.log(res);console.log(res.status);console.log(res.data);}})})} /script {% endblock %}效果 ②任务添加二 1.在urls.py中添加任务列表的路径task/add/并告诉该路径指向的视图task_add urls.py from django.urls import path from api.views import depart, user, pretty, admin, account, taskurlpatterns [# 部门管理path(depart/list/, depart.depart_list),path(depart/add/, depart.depart_add),path(depart/delete/, depart.depart_delete),path(depart/int:nid/edit/, depart.depart_edit),# 用户管理path(user/list/, user.user_list),path(user/add/, user.user_add),path(user/model/form/add/, user.user_model_form_add),path(user/int:nid/edit/, user.user_edit),path(user/int:nid/delete/, user.user_delete),# 靓号管理path(pretty/list/, pretty.pretty_list),path(pretty/add/, pretty.pretty_add),path(pretty/int:nid/edit/, pretty.pretty_edit),path(pretty/int:nid/delete/, pretty.pretty_delete),# 管理员管理path(admin/list/, admin.admin_list),path(admin/add/, admin.admin_add),path(admin/int:nid/edit/, admin.admin_edit),path(admin/int:nid/delete/, admin.admin_delete),path(admin/int:nid/reset/, admin.admin_reset),# 用户登录path(login/, account.login),path(logout/, account.logout),path(image/code/, account.image_code),# 任务管理path(task/list/, task.task_list),path(task/ajax/, task.task_ajax),path(task/add/, task.task_add), ]2.修改task.py task.py import jsonfrom django import forms from django.shortcuts import render, HttpResponse from django.http import JsonResponse from django.views.decorators.csrf import csrf_exempt from api.utils.form import BootStrapModelForm from api.models import Taskclass TaskModelForm(BootStrapModelForm):class Meta:model Taskfields __all__widgets {detail: forms.TextInput,}csrf_exempt def task_list(request):form TaskModelForm()return render(request, task_list.html, {form: form})csrf_exempt def task_ajax(request):print(get请求, request.GET)print(POST请求, request.POST)data_dict {status: True, data: [11, 22, 33, 44]}return HttpResponse(json.dumps(data_dict))csrf_exempt def task_add(request):print(request.POST)data_dict {status:True}return HttpResponse(json.dumps(data_dict))效果 在上述的基础上我们进行保存数据以及数据校验。 ③数据保存及校验 1.修改task.py task.py import jsonfrom django import forms from django.shortcuts import render, HttpResponse from django.http import JsonResponse from django.views.decorators.csrf import csrf_exempt from api.utils.form import BootStrapModelForm from api.models import Taskclass TaskModelForm(BootStrapModelForm):class Meta:model Taskfields __all__widgets {detail: forms.TextInput,}csrf_exempt def task_list(request):form TaskModelForm()return render(request, task_list.html, {form: form})csrf_exempt def task_ajax(request):print(get请求, request.GET)print(POST请求, request.POST)data_dict {status: True, data: [11, 22, 33, 44]}return HttpResponse(json.dumps(data_dict))csrf_exempt def task_add(request):print(request.POST)# 采用ModelForm对用户发过来的数据进行校验form TaskModelForm(datarequest.POST)if form.is_valid():form.save()data_dict {status: True}return HttpResponse(json.dumps(data_dict))data_dict {status: False, error: form.errors}return HttpResponse(json.dumps(data_dict))2.修改task_list.html {% extends layout.html %}{% block content %}div classcontainerdiv classpanel panel-defaultdiv classpanel-heading表单/divdiv classpanel-bodyform methodpost idtask_form novalidatediv{% for item in form %}div classcol-xs-6div classform-group styleposition: relative; margin-top: 20pxlabel{{ item.label }}/label{{ item }}span classerror_msg stylecolor: red;position: absolute;/span/div/div{% endfor %}/div/formdiv classcol-xs-12 stylemargin-top: 20pxinput idsubmit typesubmit value提 交 classbtn btn-primary center-block stylewidth: 100px;/div/div/divh1任务管理/h1h3示例1/h3input idbtn1 typebutton value点击1 classbtn btn-primaryh3示例2/h3input typetext idtxtuser placeholder姓名input typetext idtxtpwd placeholder密码input idbtn2 typebutton value点击2 classbtn btn-primaryform idfrom3h3示例2/h3input typetext nameuser placeholder姓名input typetext nameage placeholder年龄input typetext namepwd placeholder密码input typetext namemobile placeholder电话/forminput idbtn3 typebutton value点击3 classbtn btn-primary/div{% endblock %}{% block script %} script typetext/javascript$(function () {// 页面框架加载完成之后代码自动执行bindBtn1Event();bindBtn2Event();bindBtn3Event();bindaddEvent();})function bindBtn1Event() {$(#btn1).click(function () {$.ajax({url: /task/ajax/,type: post,data: {n1: 123,n2: 456},dataType: JSON,success: function (res) {console.log(res);console.log(res.status);console.log(res.data);}})})}function bindBtn2Event() {$(#btn2).click(function () {$.ajax({url: /task/ajax/,type: post,data: {name: $(#txtuser).val(),password: $(#txtpwd).val()},dataType: JSON,success: function (res) {console.log(res);console.log(res.status);console.log(res.data);}})})}function bindBtn3Event() {$(#btn3).click(function () {$.ajax({url: /task/ajax/,type: post,data: $(#from3).serialize(),dataType: JSON,success: function (res) {console.log(res);console.log(res.status);console.log(res.data);}})})}function bindaddEvent() {$(#submit).click(function () {// 每次点击,将以前的错误信息清空$(.error_msg).empty();$.ajax({url: /task/add/,type: post,data: $(#task_form).serialize(),dataType: JSON,success: function (res) {// 如果校验正确则输出“添加成功”if(res.status){alert(添加成功);} else {// 反之则在输入框下显示错误信息$.each(res.error, function(name,data){$(#id_ name).next().text(data[0]);})}}})})} /script {% endblock %}效果 关于在输入框下显示错误的原因 错误信息显示在输入框下是**因为代码通过 jQuery 的 next() 方法选择了输入框的下一个同级元素并使用 text() 方法设置了该元素的文本内容。**这里假设每个输入框后都紧跟着一个用于显示错误信息的元素例如一个 或 标签。 例如 !-- HTML 结构 -- input typetext idid_username span classerror-message/spanscript // JavaScript 代码 $(document).ready(function() {var res {status: false,error: {username: [用户名已存在]}};if (res.status) {alert(添加成功);} else {$.each(res.error, function(name, data) {$(#id_ name).next(.error-message).text(data[0]);});} }); /script在这个示例中如果 res.status 为 false则会遍历 res.error 对象并使用输入框的 id例如 id_username来定位相应的输入框。然后通过调用 next(“.error-message”)选择紧跟在输入框后的 .error-message 类的元素并使用 text(data[0]) 设置其文本内容为错误信息例如 用户名已存在。这样错误信息就会显示在对应的输入框下方。 之后在上面HTML代码的基础上进行添加以下功能具体包括 添加数据后列表自动刷新分页搜索 4.再次修改task_list.html以实现添加数据后列表自动刷新。 task_list.html success: function (res) {// 如果校验正确则输出“添加成功”if(res.status){alert(添加成功);// 页面刷新location.reload()} else {// 反之则在输入框下显示错误信息$.each(res.error, function(name,data){$(#id_ name).next().text(data[0]);})}}5.继续修改task_list.html在系统中实现并显示分页与搜索。 task_list.html {% extends layout.html %}{% block content %}div classcontainerdiv classpanel panel-defaultdiv classpanel-heading表单/divdiv classpanel-bodyform methodpost idtask_form novalidatediv{% for item in form %}div classcol-xs-6div classform-group styleposition: relative; margin-top: 20pxlabel{{ item.label }}/label{{ item }}span classerror_msg stylecolor: red;position: absolute;/span/div/div{% endfor %}/div/formdiv classcol-xs-12 stylemargin-top: 20pxinput idsubmit typesubmit value提 交 classbtn btn-primary center-blockstylewidth: 100px;/div/div/divdivdiv classpanel panel-default!-- Default panel contents --div classpanel-headingspan classglyphicon glyphicon-th-list aria-hiddentrue stylemargin-right: 5px;/spanspan任务列表/span/div!-- Table --table classtable table-borderedtheadtrthID/thth标题/thth级别/thth负责人/thth操作/th/tr/theadtbody{% for obj in queryset %}trth{{ obj.id }}/thtd{{ obj.title }}/tdtd{{ obj.get_level_display }}/tdtd{{ obj.user.username }}/tdtda classbtn btn-primary btn-xs href#编辑/aa classbtn btn-danger btn-xs href#删除/a/td/tr{% endfor %}/tbody/table/div/divul classpagination{{ page_string }}/ulbrform methodgetdiv styledisplay:inline-block; width: 150px;div classinput-groupspan input typetext classform-control placeholder请输入页码 namepage/spanspan classinput-group-btnbutton classbtn btn-primary typesubmit跳转/button/span/div/div/form{# h1任务管理/h1#} {# h3示例1/h3#} {# input idbtn1 typebutton value点击1 classbtn btn-primary#} {##} {# h3示例2/h3#} {# input typetext idtxtuser placeholder姓名#} {# input typetext idtxtpwd placeholder密码#} {# input idbtn2 typebutton value点击2 classbtn btn-primary#} {##} {# form idfrom3#} {# h3示例2/h3#} {# input typetext nameuser placeholder姓名#} {# input typetext nameage placeholder年龄#} {# input typetext namepwd placeholder密码#} {# input typetext namemobile placeholder电话#} {# /form#} {# input idbtn3 typebutton value点击3 classbtn btn-primary#}/div{% endblock %}{% block script %}script typetext/javascript$(function () {// 页面框架加载完成之后代码自动执行bindBtn1Event();bindBtn2Event();bindBtn3Event();bindaddEvent();})function bindBtn1Event() {$(#btn1).click(function () {$.ajax({url: /task/ajax/,type: post,data: {n1: 123,n2: 456},dataType: JSON,success: function (res) {console.log(res);console.log(res.status);console.log(res.data);}})})}function bindBtn2Event() {$(#btn2).click(function () {$.ajax({url: /task/ajax/,type: post,data: {name: $(#txtuser).val(),password: $(#txtpwd).val()},dataType: JSON,success: function (res) {console.log(res);console.log(res.status);console.log(res.data);}})})}function bindBtn3Event() {$(#btn3).click(function () {$.ajax({url: /task/ajax/,type: post,data: $(#from3).serialize(),dataType: JSON,success: function (res) {console.log(res);console.log(res.status);console.log(res.data);}})})}function bindaddEvent() {$(#submit).click(function () {// 每次点击,将以前的错误信息清空$(.error_msg).empty();$.ajax({url: /task/add/,type: post,data: $(#task_form).serialize(),dataType: JSON,success: function (res) {// 如果校验正确则输出“添加成功”if (res.status) {alert(添加成功);// 页面刷新location.reload()} else {// 反之则在输入框下显示错误信息$.each(res.error, function (name, data) {$(#id_ name).next().text(data[0]);})}}})})}/script {% endblock %}6.修改task.py task.py import json from api.utils.pagination import Pagination from django import forms from django.shortcuts import render, HttpResponse from django.http import JsonResponse from django.views.decorators.csrf import csrf_exempt from api.utils.form import BootStrapModelForm from api.models import Taskclass TaskModelForm(BootStrapModelForm):class Meta:model Taskfields __all__widgets {detail: forms.TextInput,}csrf_exempt def task_list(request):form TaskModelForm()return render(request, task_list.html, {form: form})csrf_exempt def task_ajax(request):print(get请求, request.GET)print(POST请求, request.POST)data_dict {status: True, data: [11, 22, 33, 44]}return HttpResponse(json.dumps(data_dict))csrf_exempt def task_add(request):print(request.POST)# 采用ModelForm对用户发过来的数据进行校验form TaskModelForm(datarequest.POST)if form.is_valid():form.save()data_dict {status: True}return HttpResponse(json.dumps(data_dict))data_dict {status: False, error: form.errors}return HttpResponse(json.dumps(data_dict))csrf_exempt def task_list(request): 任务列表 form TaskModelForm()# 生成页码与搜索data_dict {}search_data request.GET.get(query, )# title__ccontains 表示使用title作为搜索字段进行内容匹配if search_data:data_dict[title__contains] search_data# 对搜索内容进行查询,为空表示获取所有数据queryset Task.objects.filter(**data_dict).order_by(-id)page_object Pagination(request, queryset, page_size10, page_parampage)page_queryset page_object.page_queryset# 调用对象的html方法,生成页码page_object.html()page_string page_object.page_stringcontext {queryset: page_queryset,form: form,page_string: page_string,search_data: search_data,}return render(request, task_list.html, context)效果 本篇内容关于任务管理就暂时讲到这里下一篇将会一起实现订单管理的内容使系统的功能更加丰富 很感谢你能看到这里如有相关疑问还请下方评论留言。 Code_流苏(CSDN)一个喜欢古诗词和编程的Coder 希望本篇内容能对大家有所帮助如果大家喜欢的话请动动手点个赞和关注吧非常感谢你们的支持

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/90504.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文化馆门户网站建设的作用及意义杭州工业设计公司有哪些

概要 机器学习模型的“黑箱”困境 机器学习模型的崛起让我们惊叹不已!不论是预测房价、识别图片中的猫狗,还是推荐给你喜欢的音乐,这些模型都表现得非常出色。但是,有没有想过,这些模型到底是如何做出这些决策的呢&a…

做书网站 时光网店代运营哪家公司好

计算机学院举办2018届毕业生足球赛当下又到了毕业季,2018届的本科同学们即将离开校园,开启人生新的阶段,在此背景下由共青团西北工业大学计算机学院委员会主办,10011508团支部、计算机学院体工部承办这一次毕业生足球赛。本次比赛…

网络网站排名优化福建亨立建设集团有限公司网站

目录 一、定义二、使用场景三、使用方法四、结构五、代码示例六、优点七、缺点八、适用场景 一、定义 1.在父类定义一个操作中的算法骨架,将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤 二、使用场景 …

asp.net网站很快吗网站建设公司有哪些

函数中的作用域 对这些问题的最常见的回答是,JavaScript 拥有基于函数的作用域。也就是,你声明的每一个函数都为自己创建了一个气泡,而且没有其他的结构可以创建它们自己的作用域气泡。但是就像我们一会儿将会看到的,这不完全正确…

网站 动画 怎么做的seo知识分享

RHEL5 Oracle Linux 5上生成正确的udev rule 规则文件1.确认在所有RAC节点上已经安装了必要的UDEV包[rootrh2 ~]# rpm -qa|grep udevudev-095-14.21.el52.通过scsi_id获取设备的块设备的唯一标识名,假设系统上已有LUN sdc-sdifor i in c d e f g h i;doecho "s…

临海受欢迎营销型网站建设百度公司地址

如何把 NFC 挂载到 G7的系统中去,调试一步一步的过程中分别做了什么。 1. 在AHB1上找到1个slave的空挡,ahb-slave8,修改相应AMAB里面的ahb_dcdr.v 文件,给NFC分配基地址空间 0x110050002.在ahb1_top文件当中例化NFC,同…

外国网站在中国做推广查询自己网站外链

在Android应用中,如果需要使用一些敏感的权限(例如相机、位置等),需要经过用户的授权才能访问。在Android 6.0(API级别23)及以上的版本中,引入了动态权限申请机制。以下是在Android应用中实现动…

深圳市宝安区网站建设网站建设活动计划

Vue.js 提供了一套轻量级的、可扩展的模板校验规则。这些规则可以通过在v-model绑定中添加.modifier来使用,例如v-model.trim 下面是一些常见的 Vue.js 校验规则: required: 检查值是否非空email: 检查值是否符合电子邮件格式min: 检查值是否大于等于指…

怎么做网站页面模板mufen wordpress

使用DOM操纵样式表 ✍ 操纵元素的Style样式属性(所有的均对于CSS的内联式) 对于每个CSS样式,Style对象都包含了一个相对应的属性,只需要用到style属性即可; Div.style.color "red"; //给div元素设置字体颜色…

网站的电子画册怎么做前端效果网站

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 01 设计模式前言-设计模式源码02 Singleton单例03 Strategy策略04 FactoryMethod工厂方法-AbstractFactory抽象工厂05 Facade门面-Mediator调停者06 Decorator装饰器…

成都网站建站推广福州百度网站快速优化

1. 查看镜像定义的内容 docker image inspeck 镜像名:版本 2. 查看可回滚历史 # myapp-deploy 指定哪个 deployment kubectl rollout history deployment myapp-deploy 3. 回滚到上一个版本 # rollout undo 回滚到上一版本的 deployment kubectl rollout undo deployment mya…

网站建设价格差别档案网站的建设

lua-resty-http是一个基于OpenResty的HTTP客户端库,用于在Lua中进行HTTP请求和响应的处理。它提供了简单易用的接口,可以方便地进行网页抓取和爬虫开发。 使用lua-resty-http进行爬虫,需要先安装OpenResty和lua-resty-http库,并将…

在网站加上一个模块怎么做食堂网站建设方案

资源库 领域对象需要资源存储。存储手段多样化,常见就是数据库,分布式缓存,localCache.资源库的作用,就是对领域的存储和访问进行统一管理对象。在抽奖平台中。通过下面这种方式组织资源库。 //数据库资源 import com.company.example.bussiness.lottery.repo.dao.AwardP…

注册公司网站怎么做秦皇岛制作网站

文章目录 持久化配置慢查询命令及安全配置内存配置 持久化配置 慢查询 命令及安全配置 漏洞:Redis未授权访问配合SSH key文件利用分析-腾讯云开发者社区-腾讯云 (tencent.com) 漏洞出现的核心的原因有以下几点 Redis未设置密码利用了Redis的config set命令动态修…

商城网站建设分为几块网页微信版看聊天记录有记录吗

聊天是解释WebSocket的最典型示例之一。 它是一个相当常用的界面,可以很容易地解释WebSocket的基本概念。 当然,Java EE 7 WebSocket也有一个, 在这里可用 ! 您可以使用以下步骤在WildFly上轻松运行它: curl -O http:…

网站模板和源码wordpress微信 加速

程序计数器 JVM中的程序计数器(Program Counter Register)并非是广义上所指的物理寄存器,是对物理PC寄存器的一种抽象模拟 PC寄存器(程序计数器) PC寄存器用来存储指向下一条指令的地址,也即将要执行的指令代码。由执行引擎读取下一条指令。 它是一块很…

手机建站系统源码app开发大概多少钱

HDR 成像技术学习(一) HDR 成像技术学习(二) 我们拍摄的照片来自传感器上的像素,它们将光处理为电信号,组合起来输出画面。当捕捉对象亮度过强,大量电荷挤在单个像素内,生成的图像就会过曝。 LOFIC(Lateral Overflow Integration Capacitor,横向溢出集合电容…

山东省和城乡建设厅网站摄影网站建设任务书

线程的概念 进程与线程内核实现 通过函数clone实现的 ps -Lf pidLinux内核线程实现原理 同一个进程下的线程,共享该进程的内存区, 但是只有stack区域不共享。 线程共享资源 a.文件描述符表 b.每种信号的处理方式 c.当前工作目录 d.用户id和组id 线程…

常州网站建设服务中国建设监理协会网站个人会员系统

一、基于tcp的socket通信的基本原理分析。基于tcp的socket通信,主要依靠两个循环,分别是连接循环和通信循环。这个前面的文章有写过,在这里就不再重复了。二、socketserver实现多并发的原理分析。1.server类:2.reques类。类继承关…

深圳网站设计网站建设哪个好搭配服装网站源码

类的定义 修饰符含义1无或internal 只能在当前项目中访问类,其它项目引用后也无法访问2public 可以任何地方访问类3abstract 不能实例化,只能供继承之用4sealed 不能供派生之用,只能实例化5internal abstract136public abstract237intern…