框架+jquery Ajax技术实现的增删改查(CRUD)"/>
基于Python Django框架+jquery Ajax技术实现的增删改查(CRUD)
文件层级目录
- djiangoproject
-
djiangoproject
- settings.py
- urls.py
- wsgi.py
-
shopapp
- entity
- dao
- service
- admin.py
- apps.py
- models.py
- test.py
- views.py
-
static
- css
- bootstrap
- js
- uploads
- echarts
-
templates
- jobinfo
- personalinfo
- systeminfo
- footer.html
- index.html
- left.html
- login.html
- main.html
- top.html
-
manage.py
-
settings.py
"""
Django settings for djangoproject project.Generated by 'django-admin startproject' using Django 2.2.6.For more information on this file, see
.2/topics/settings/For the full list of settings and their values, see
.2/ref/settings/
"""import os# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))# Quick-start development settings - unsuitable for production
# See .2/howto/deployment/checklist/# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '(46xri8ef295s*edox_(t=w%k$ks=wx0wmm=3@1yo!c=je81-p'SESSION_ENGINE = 'django.contrib.sessions.backends.cache'# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = TrueALLOWED_HOSTS = []# Application definitionINSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','shopapp.apps.ShopappConfig'
]MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middlewaremon.CommonMiddleware',#'django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',
]ROOT_URLCONF = 'djangoproject.urls'TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR, 'templates')],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},
]WSGI_APPLICATION = 'djangoproject.wsgi.application'# Database
# .2/ref/settings/#databasesDATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'db_test_shop1','HOST': '127.0.0.1','USER': 'root','PASSWORD':'root','PORT': '3306','OPTIONS':{'isolation_level':None}}
}# Password validation
# .2/ref/settings/#auth-password-validatorsAUTH_PASSWORD_VALIDATORS = [{'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',},{'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',},{'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',},{'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',},
]# Internationalization
# .2/topics/i18n/LANGUAGE_CODE = 'en-us'TIME_ZONE = 'UTC'USE_I18N = TrueUSE_L10N = TrueUSE_TZ = True# Static files (CSS, JavaScript, Images)
# .2/howto/static-files/STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join(BASE_DIR,"static"),
)# 配置输出sql语句
LOGGING = {'version': 1,'disable_existing_loggers': False,'handlers': {'console':{'level':'DEBUG','class':'logging.StreamHandler',},},'loggers': {'django.db.backends': {'handlers': ['console'],'propagate': True,'level':'DEBUG',},}
}
urls.py
"""djangoproject URL ConfigurationThe `urlpatterns` list routes URLs to views. For more information please see:.2/topics/http/urls/
Examples:
Function views1. Add an import: from my_app import views2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views1. Add an import: from other_app.views import Home2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf1. Import the include() function: from django.urls import include, path2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from shopapp.views import *urlpatterns = [path('admin/', admin.site.urls),path('', index),path('gologin/', goLogin),path('login/', login),path('logout/', logout),path('regist.do/', regist),path('upload.do/', uploadFile),path('goajaxjobtaskinfo/', goJobTaskInfo),path('ajaxjobtaskinfo/', getJobTaskInfo),path('ajaxjobsalary/', getJobSalary),path('goajaxuserinfo/', goAjaxUserInfo),path('ajaxuserinfo/', getUserInfo),path('ajaxdeptinfo/', getDeptList)
]
wsgi.py
"""
WSGI config for djangoproject project.It exposes the WSGI callable as a module-level variable named ``application``.For more information on this file, see
.2/howto/deployment/wsgi/
"""import osfrom django.core.wsgi import get_wsgi_applicationos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djangoproject.settings')application = get_wsgi_application()
dao层(自配的数据库连接与操作,该项目未用)
entity下
jobtask.py
# 封装数据类 VO:value object entity 类
class JobTask():def __init__(self):self.__taskId = Noneself.__taskTitle = Noneself.__taskURL = Noneself.__taskState = Nonepass@propertydef taskId(self):return self.__taskIdpass@taskId.setterdef taskId(self, taskId):self.__taskId = taskIdpass@propertydef taskTitle(self):return self.__taskTitlepass@taskTitle.setterdef taskTitle(self, taskTitle):self.__taskTitle = taskTitlepass@propertydef taskURL(self):return self.__taskURLpass@taskURL.setterdef taskURL(self, taskURL):self.__taskURL = taskURLpass@propertydef taskState(self):return self.__taskStatepass@taskState.setterdef taskState(self, taskState):self.__taskState = taskStatepasspass
entity下
user.py
# 封装数据类 VO:value object entity 类
class User():def __init__(self):self.__userId = Noneself.__userName = Noneself.__userPwd = Noneself.__userSex = Noneself.__userPic = Noneself.__userBirth = Noneself.__userIntro = Noneself.__userDeptId = Noneself.__userDeptName = Noneself.__userRole = Nonepass@propertydef userId(self):return self.__userIdpass@userId.setterdef userId(self, userId):self.__userId = userIdpass@propertydef userName(self):return self.__userNamepass@userName.setterdef userName(self, userName):self.__userName = userNamepass@propertydef userPwd(self):return self.__userPwdpass@userPwd.setterdef userPwd(self, userPwd):self.__userPwd = userPwdpass@propertydef userSex(self):return self.__userSexpass@userSex.setterdef userSex(self, userSex):self.__userSex = userSexpass@propertydef userPic(self):return self.__userPicpass@userPic.setterdef userPic(self, userPic):self.__userPic = userPicpass@propertydef userBirth(self):return self.__userBirthpass@userBirth.setterdef userBirth(self, userBirth):self.__userBirth = userBirthpass@propertydef userIntro(self):return self.__userIntropass@userIntro.setterdef userIntro(self, userIntro):self.__userIntro = userIntropass@propertydef userDeptId(self):return self.__userDeptIdpass@userDeptId.setterdef userDeptId(self, userDeptId):self.__userDeptId = userDeptIdpass@propertydef userDeptName(self):return self.__userDeptNamepass@userDeptName.setterdef userDeptName(self, userDeptName):self.__userDeptName = userDeptNamepass@propertydef userRole(self):return self.__userRolepass@userRole.setterdef userRole(self, userRole):self.__userRole = userRolepasspass
migrations(无文件)
service(未使用)
admin.py
from django.contrib import admin# Register your models here.
from shopapp.models import TUser
from shopapp.models import JobDept
admin.site.register(TUser)
admin.site.register(JobDept)
apps.py
from django.apps import AppConfigclass ShopappConfig(AppConfig):name = 'shopapp'
models.py
# This is an auto-generated Django model module.
# You'll have to do the following manually to clean this up:
# * Rearrange models' order
# * Make sure each model has one field with primary_key=True
# * Make sure each ForeignKey has `on_delete` set to the desired behavior.
# * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
# Feel free to rename the models, but don't rename db_table values or field names.
from django.db import modelsclass JobDept(models.Model):dept_id = models.IntegerField(primary_key=True)dept_name = models.CharField(unique=True, max_length=45, blank=True, null=True)dept_parentid = models.IntegerField(blank=True, null=True)class Meta:managed = Falsedb_table = 'job_dept'class TUser(models.Model):user_id = models.AutoField(db_column='USER_ID', primary_key=True) # Field name made lowercase.user_name = models.CharField(db_column='USER_NAME', unique=True, max_length=32) # Field name made lowercase.user_pwd = models.CharField(db_column='USER_PWD', max_length=512) # Field name made lowercase.user_age = models.IntegerField(db_column='USER_AGE', blank=True, null=True) # Field name made lowercase.user_sex = models.IntegerField(db_column='USER_SEX', blank=True, null=True) # Field name made lowercase.user_qq = models.IntegerField(db_column='USER_QQ', blank=True, null=True) # Field name made lowercase.user_cellphone = models.CharField(db_column='USER_CELLPHONE', max_length=20, blank=True, null=True) # Field name made lowercase.user_money = models.FloatField(db_column='USER_MONEY', blank=True, null=True) # Field name made lowercase.user_status = models.IntegerField(db_column='USER_STATUS', blank=True, null=True) # Field name made lowercase.user_pic = models.CharField(db_column='USER_PIC', max_length=128, blank=True, null=True) # Field name made lowercase.user_role = models.IntegerField(db_column='USER_ROLE', blank=True, null=True) # Field name made lowercase.jobDept= models.ForeignKey(JobDept, db_column='', on_delete=models.CASCADE, blank=True, null=True, to_field='dept_id') # null=True生成left joinuser_birth = models.DateTimeField(db_column='USER_BIRTH', blank=True, null=True) # Field name made lowercase.user_intro = models.TextField(db_column='USER_INTRO', blank=True, null=True) # Field name made lowercase.class Meta:managed = Falsedb_table = 't_user'
tests.py
(无代码)
views.py
from django.shortcuts import render,redirect
from django.http.response import HttpResponse
from shopapp.service.userservice import UserService
from shopapp.service.jobtaskservice import JobTaskService
from shopapp.entity.jobtask import JobTask
import json
import hashlib
from .models import TUser
from .models import JobDept
from django.core import serializers
import os
from datetime import datetime# Create your views here.
userService = UserService()
jobTaskService = JobTaskService()def index(request):return render(request, 'index.html')passdef goLogin(request):return render(request, 'login.html')passdef login(request):userName = request.POST.get('userName')userPwd = request.POST.get('userPwd')remeberMe = request.POST.get('rememberMe')result = userService.findUserByUserName(userName)isLogin = Falseif result and (remeberMe == None or remeberMe == 'false'):if result[0][2] == hashlib.md5(userPwd.encode(encoding='utf-8')).hexdigest():isLogin = Truepasselif result and remeberMe == 'true':if result[0][2] == userPwd:isLogin = Truepasspassif isLogin:userItem = {}userItem['userId'] = result[0][0]userItem['userName'] = result[0][1]userItem['userPic'] = result[0][9]userItem['userRole'] = result[0][10]request.session['user'] = userItemresponse = render(request, 'main.html')if remeberMe == 'false':response.set_cookie('userName', userName)response.set_cookie('userPwd', result[0][2])response.set_cookie('rememberMe', 'true')passelif remeberMe == None:response = render(request, 'main.html')response.delete_cookie('userName')response.delete_cookie('userPwd')response.delete_cookie('rememberMe')passreturn responseelse:return render(request, 'login.html')passdef regist(request):userDict = json.loads(request.body.decode('utf-8'))'''user = TUser()user.user_name = userDict.get('userName') # 表单提交的数据使用request.form[]user.user_pwd = hashlib.md5((userDict.get('userPwd')).encode(encoding='utf-8')).hexdigest()user.user_pic = userDict.get('userPic')user.user_birth = datetime.strptime(userDict.get('userBirth'), '%Y-%m-%d')user.user_sex = userDict.get('userSex')user.user_intro = userDict.get('userIntro')result = user.save()'''result = TUser.objects.create(user_name = userDict.get('userName'),user_pwd=hashlib.md5((userDict.get('userPwd')).encode(encoding='utf-8')).hexdigest(),user_pic=userDict.get('userPic'),user_birth=datetime.strptime(userDict.get('userBirth'), '%Y-%m-%d'),user_sex=userDict.get('userSex'),user_intro=userDict.get('userIntro'))if result:result = 1else:result = 0return HttpResponse(json.dumps({'result': result}), content_type="application/json")passdef logout(request):request.session.flush()return render(request, 'login.html')passdef goJobTaskInfo(request):return render(request, "jobinfo/jobtaskinfo.html")passdef getJobTaskInfo(request):jobTaskData = request.body.decode('utf-8')jobTaskDict = json.loads(jobTaskData)tData = {}jobTask = JobTask()jobTask.taskTitle = jobTaskDict.get('taskTitle')jobTask.taskURL = jobTaskDict.get('taskURL')currentPage = int(jobTaskDict.get('currentPage'))pageSize = int(jobTaskDict.get('pageSize'))opr = jobTaskDict.get('opr')taskId = int(jobTaskDict.get('taskId'))jobTask.taskId = taskIdupdateResult = 0if opr == 'del':updateResult = jobTaskService.removeJobTask(taskId)passelif opr == 'update':tTask = jobTaskService.findJobTaskByJobTaskId(taskId)tData['taskId'] = tTask.taskIdtData['taskTitle'] = tTask.taskTitletData['taskURL'] = tTask.taskURLreturnData = {'code': 1, 'jobTaskData': tData, 'pageSize': pageSize, 'currentPage': currentPage, 'opr':'update'}return HttpResponse(json.dumps(returnData), content_type="application/json")elif opr == 'submitUpdate':updateResult = jobTaskService.updateJobTask(jobTask)passresult = jobTaskService.findPageJobTaskList(jobTask, pageSize, currentPage)counts = jobTaskService.countJobTasks(jobTask)totalPage = 0if(counts%pageSize == 0):totalPage = counts//pageSizeelse:totalPage = counts // pageSize + 1passreturnData = {'code':1, 'jobTaskData':result, 'pageSize':pageSize, 'currentPage':currentPage, 'totalPage':totalPage, 'updateResult':updateResult, 'opr':'search','counts':counts}return HttpResponse(json.dumps(returnData), content_type="application/json")passdef getJobSalary(request):result = jobTaskService.findJobMeanSalary()returnData = {'code':1, 'salary':result}r = json.dumps(returnData)return HttpResponse(json.dumps(returnData), content_type="application/json")passdef goAjaxUserInfo(request):return render(request, "systeminfo/userinfo.html")passdef getUserInfo(request):userData = request.body.decode('utf-8')userDict = json.loads(userData)tData = {}user = TUser()user.user_name = userDict.get('userName')user.user_sex = userDict.get('userSex')currentPage = int(userDict.get('currentPage'))pageSize = int(userDict.get('pageSize'))opr = userDict.get('opr')userId = int(userDict.get('userId'))user.user_id= userIduser.jobDept_id = int(userDict.get('userDeptId'))updateResult = 0if opr == 'del':updateResult = user.delete()passelif opr == 'update':tUser = TUser.objects.filter(user_id=userId).values('user_id', 'user_name', 'user_sex', 'jobDept_id', 'jobDept__dept_name')tData['userId'] = tUser[0].get('user_id')tData['userName'] = tUser[0].get('user_name')tData['userSex'] = tUser[0].get('user_sex')tData['userDeptId'] = tUser[0].get('jobDept_id')tData['userDeptName'] = tUser[0].get('jobDept__dept_name')returnData = {'code': 1, 'userData': tData, 'pageSize': pageSize, 'currentPage': currentPage, 'opr':'update'}return HttpResponse(json.dumps(returnData), content_type="application/json")elif opr == 'submitUpdate':currentPage = 1updateResult = TUser.objects.filter(user_id=userId).update(user_sex=user.user_sex, jobDept_id=user.jobDept_id)passquery = TUser.objectsif user.user_name:query = query.filter(user_name__contains=user.user_name)if user.user_sex:query = query.filter(user_sex=user.user_sex)passstartRow = (currentPage - 1)*pageSizeendRow = currentPage*pageSizeresult = query.values('user_id', 'user_name', 'user_sex', 'jobDept__dept_name')[startRow:endRow] # 会生成 LIMIT 2 OFFSET 1counts = query.count()totalPage = 0if(counts%pageSize == 0):totalPage = counts//pageSizeelse:totalPage = counts // pageSize + 1pass# data = serializers.serialize("json", result, use_natural_foreign_keys=True)# data = json.loads(data)data = []for tempUser in result:dictItem = {'pk':tempUser.get('user_id')}fieldsItem ={'user_name':tempUser.get('user_name'), 'user_sex':tempUser.get('user_sex'), 'user_deptname':tempUser.get('jobDept__dept_name')}dictItem['fields'] = fieldsItemdata.append(dictItem)pass'''for tempUser, tdata in zip(result, data):tdata['fields']['user_deptname'] = tempUser.jobDept.dept_name # 获取外键关联的时候,是第二次查询pass'''returnData = {'code':1, 'userData':data, 'pageSize':pageSize, 'currentPage':currentPage, 'totalPage':totalPage, 'updateResult':updateResult, 'opr':'search','counts':counts}return HttpResponse(json.dumps(returnData), content_type="application/json")passdef getDeptList(request):parentId = int(request.GET.get('parentId'))if parentId ==0:result = JobDept.objects.filter(dept_parentid__isnull=True).all()else:result = JobDept.objects.filter(dept_parentid=parentId).all()data = serializers.serialize("json", result)data = json.loads(data)return HttpResponse(json.dumps({'code':1, 'data':data}), content_type="application/json")passdef uploadFile(request):# 后缀需要检查的file = request.FILES.get('upload')if file:try:with open(os.path.dirname(__file__) + os.sep + '..' + os.sep + 'static' + os.sep + 'uploads'+ os.sep + file.name, "wb+") as fp:for chunk in file.chunks():fp.write(chunk)passexcept Exception as e:return HttpResponse(json.dumps({'uploaded': 0, 'fileName': "", 'url': ""}), content_type="application/json")passreturn HttpResponse(json.dumps({'uploaded': 1, 'fileName':file.name, 'url': os.sep + 'static' + os.sep + 'uploads'+ os.sep + file.name}), content_type="application/json")else:return HttpResponse(json.dumps({'uploaded': 0, 'fileName': "", 'url': ""}), content_type="application/json")pass
jobtask.js
function getJobTaskData(currentPage, pageSize, opr, taskId) {var taskTitle = document.searchForm.taskTitle.valuevar taskURL = document.searchForm.taskURL.valueif(opr == 'del'){if(!confirm('确定要删除吗?')){return false}}else if(opr == 'submitUpdate'){taskTitle = document.taskForm.taskTitle.valuetaskURL = document.taskForm.taskURL.valuetaskId = document.taskForm.taskId.valuecurrentPage = document.taskForm.currentPage.valuepageSize = document.taskForm.pageSize.value$('#modal-default').modal('hide')}$.ajax({type: 'post', // 传数据的方式url: '/ajaxjobtaskinfo/',dataType: 'json', // xml、json、script、htmldata:JSON.stringify({'taskTitle': taskTitle, // $('#taskTitle') == document.getElementById('taskTitle')'taskURL' : taskURL,'taskId': taskId,'pageSize': pageSize,'currentPage': currentPage,'opr': opr}),error: function(xhr, err){alert('请求失败,请检查,' + err + '!')},success: function(data, textStatus){ // success对应的回调函数的第一个参数,是服务器返回的数据// 查询后、删除后、修改后都走这个ifif(data.code == 1 && opr != 'update'){var htmlText = ""for(var i =0;i <data.jobTaskData.length;i++){htmlText += '<tr>' +' <td align="center"><input type="checkbox" name="taskId" value="'+ data.jobTaskData[i][0] +'" /></td>\n' +' <td>' + data.jobTaskData[i][0] + '</td>\n' +' <td>' + data.jobTaskData[i][1] + '</td>\n' +' <td style="width: 500px;word-break: break-all;">' + data.jobTaskData[i][2] + '</td>\n' +' <td style="width: 160px;">\n' +' <button type="button" class="btn btn-danger" οnclick="getJobTaskData('+ data.currentPage +',' + data.pageSize + ','+ '\'del\''+',' + data.jobTaskData[i][0] +')">删除</button>' +' <button type="button" class="btn btn-info" οnclick="getJobTaskData('+ data.currentPage +',' + data.pageSize + ','+ '\'update\''+',' + data.jobTaskData[i][0] +')">修改</button>'+' </td>\n' +' </tr>\n'}pageText = '<tr style="text-align: right;"><td colspan="5">'+ '当前第' + data.currentPage + '页 总共有' + data.totalPage + '页 ';if(data.currentPage <= 1) {pageText += '首页 上一页 ';}else{pageText += '<a href="javascript:getJobTaskData(1,10,\'search\', 0);">首页</a> ' +'<a href="javascript:getJobTaskData(' + (data.currentPage - 1) + ', 10, \'search\', 0);">上一页</a> ';}if(data.currentPage >= data.totalPage){pageText += '下一页 尾页 ';}else {pageText += '<a href="javascript:getJobTaskData(' + (data.currentPage + 1) + ', 10, \'search\', 0);">下一页</a> ' +'<a href="javascript:getJobTaskData(' + data.totalPage + ', 10, \'search\', 0);">尾页</a> ';}pageText +='总共有'+ data.counts + '条 </td></tr>'$('#dataBody').empty()$('#dataBody').append(htmlText)$('#dataBody').append(pageText)document.searchForm.currentPage.value = data.currentPagedocument.searchForm.pageSize.value=data.pageSizeif( opr != 'search' && data.updateResult > 0 ) {alert("操作成功")}else if(opr != 'search' && data.updateResult <= 0){alert("操作失败")}}else if(data.code == 1 && opr == 'update'){document.taskForm.taskTitle.value = data.jobTaskData.taskTitledocument.taskForm.taskURL.value = data.jobTaskData.taskURLdocument.taskForm.taskId.value = data.jobTaskData.taskIddocument.taskForm.currentPage.value = data.currentPagedocument.taskForm.pageSize.value = data.pageSize$('#modal-default').modal()}}});
}
$(document).ready(function(){getJobTaskData(1, 10, 'search', 0)}
)
userdata.py
function getUserData(currentPage, pageSize, opr, userId) {var userName = document.searchForm.userName.valuevar userSex = document.searchForm.userSex.valuevar userDeptId = 0if(opr == 'del'){if(!confirm('确定要删除吗?')){return false}}else if(opr == 'submitUpdate'){userName = document.userForm.userName.valueuserSex = document.userForm.userSex.valueuserId = document.userForm.userId.valueuserDeptId = document.userForm.userDeptId.valuecurrentPage = document.userForm.currentPage.valuepageSize = document.userForm.pageSize.value}$.ajax({type: 'post', // 传数据的方式url: '/ajaxuserinfo/',dataType: 'json', // xml、json、script、htmldata:JSON.stringify({'userName': userName, // $('#userName') == document.getElementById('userName')'userSex' : userSex,'userId': userId,'userDeptId': userDeptId,'pageSize': pageSize,'currentPage': currentPage,'opr': opr // 重用一个ajax请求实现增加删除修改查询 CRUD}),error: function(xhr, err){alert('请求失败,请检查,' + err + '!')},success: function(data, textStatus){ // success对应的回调函数的第一个参数,是服务器返回的数据// data = JSON.parse(data)if(data.code == 1 && opr != 'update'){var htmlText = ""for(var i =0;i <data.userData.length;i++){htmlText += '<tr>' +' <td align="center"><input type="checkbox" name="userId" value="'+ data.userData[i].pk +'" /></td>\n' +' <td>' + data.userData[i].pk + '</td>\n' +' <td>' + data.userData[i].fields.user_name + '</td>\n' +' <td>' + (data.userData[i].fields.user_sex == 1?'男':'女') + '</td>\n' +' <td>' + data.userData[i].fields.user_deptname + '</td>\n' +' <td style="width: 160px;">\n' +' <button type="button" class="btn btn-danger" οnclick="getUserData('+ data.currentPage +',' + data.pageSize + ','+ '\'del\''+',' + data.userData[i].pk +')">删除</button>' +' <button type="button" class="btn btn-info" οnclick="getUserData('+ data.currentPage +',' + data.pageSize + ','+ '\'update\''+',' + data.userData[i].pk +')">修改</button>'+' </td>\n' +' </tr>\n'}pageText = '<tr style="text-align: right;"><td colspan="6">'+ '当前第' + data.currentPage + '页 总共有' + data.totalPage + '页 ';if(data.currentPage <= 1) {pageText += '首页 上一页 ';}else{pageText += '<a href="javascript:getUserData(1,10,\'search\', 0);">首页</a> ' +'<a href="javascript:getUserData(' + (data.currentPage - 1) + ', 10, \'search\', 0);">上一页</a> ';}if(data.currentPage >= data.totalPage){pageText += '下一页 尾页 ';}else {pageText += '<a href="javascript:getUserData(' + (data.currentPage + 1) + ', 10, \'search\', 0);">下一页</a> ' +'<a href="javascript:getUserData(' + data.totalPage + ', 10, \'search\', 0);">尾页</a> ';}pageText +='总共有'+ data.counts + '条 </td></tr>'$('#dat
更多推荐
基于Python Django框架+jquery Ajax技术实现的增删改查(CRUD)
发布评论