Django是利用Python语言从事Web开发的首选框架。

Django在发展过程中,为了达到非常高效率的网站结构搭建,提供给开发人员一个干净的项目结构,让开发人员更多精力集中在功能开发上,而不是技术实现上,所有Django对于常规的MVT处理进行了升级——MVT处理模式。
MVT处理模式:实在MVT处理模式上,升级得到的一种更加符合实际项目开发流程的处理思路,在这种处理模式中,将功能比较单一的控制器Controller部分,封装成了路由,由路由来完成请求的分发操作【路由是通过配置实现的】

M(model)模型层、类以及跟数据库相关的代码;
V(view)视图层
T(templates)模板层
其优点也很多,比如功能完善要素齐全强大的数据库访问组件先进的App设计理念自助式的管理系统admin以及其debug信息全面完善的文档等。

djangoproject(项目文件名)
—djangoproject(初始文件夹)
——settings.py(配置文件)
——urls.py(路由文件)
——wsgi.py(WSGI机制)
—shopapp(右击选中Terminal 键入python manage.py startapp shopapp命令行生成该文件,包含如下子文件)
——migrations(不需要操作)
——static(包含js文件和css文件)
———js(js文件)
————jquery-3.2.1.min.js(引入jquery框架)
————shop.js(ajax具体应用)
——admin.py(注册model中的类)
——apps.py(注册app)
——model.py(右击选中Terminal 键入python manage.py inspectdb > shopapp/models.py 自动生成settings.py中配置的数据库中的各个表的数据列)
——tests.py
——views.py(CRUD的具体实现)
—templates(html文件)
——jobtaskinfo.html(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
https://docs.djangoproject.com/en/2.2/topics/settings/For the full list of settings and their values, see
https://docs.djangoproject.com/en/2.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 https://docs.djangoproject.com/en/2.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.middleware.common.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
# https://docs.djangoproject.com/en/2.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
# https://docs.djangoproject.com/en/2.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
# https://docs.djangoproject.com/en/2.2/topics/i18n/LANGUAGE_CODE = 'en-us'TIME_ZONE = 'UTC'USE_I18N = TrueUSE_L10N = TrueUSE_TZ = True# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.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

from django.contrib import admin
from django.urls import path
from shopapp.views import *urlpatterns = [path('admin/', admin.site.urls),path('', index),path('gologin.do', 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

import osfrom django.core.wsgi import get_wsgi_applicationos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djangoproject.settings')application = get_wsgi_application()

shop.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 + '页&nbsp;&nbsp;总共有' + data.totalPage + '页&nbsp;&nbsp;';if(data.currentPage <= 1) {pageText += '首页 &nbsp;&nbsp;上一页&nbsp;&nbsp;';}else{pageText += '<a href="javascript:getJobTaskData(1,10,\'search\', 0);">首页</a> &nbsp;&nbsp;' +'<a href="javascript:getJobTaskData(' + (data.currentPage - 1) + ', 10, \'search\', 0);">上一页</a>&nbsp;&nbsp;';}if(data.currentPage >= data.totalPage){pageText += '下一页&nbsp;&nbsp;尾页&nbsp;&nbsp;';}else {pageText += '<a href="javascript:getJobTaskData(' + (data.currentPage + 1) + ', 10, \'search\', 0);">下一页</a>&nbsp;&nbsp;' +'<a href="javascript:getJobTaskData(' + data.totalPage + ', 10, \'search\', 0);">尾页</a>&nbsp;&nbsp;';}pageText +='总共有'+ data.counts + '条&nbsp;&nbsp;</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)}
)

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'

model.py

from django.db import modelsclass JobDept(models.Model):dept_id = models.IntegerField(primary_key=True)dept_name = models.TextField(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, on_delete=models.DO_NOTHING, blank=True, null=True)  # jobDept__dept_id/user_birth = models.DateTimeField(db_column = ' USER_BIRTH', blank = True, null = True)  #Field name madelowercase.user_intro = models.DateTimeField(db_column = ' USER_INTRO', blank = True, null = True)class Meta:managed = Falsedb_table = 't_user'

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')rememberMe = request.POST.get('rememberMe')result = userService.findUserByUserName(userName)isLogin = Falseif result and (rememberMe == None or rememberMe == 'false'):if result[0][2] == hashlib.md5(userPwd.encode(encoding='utf-8')).hexdigest():isLogin = Trueelif result and rememberMe == 'false':if result[0][2] == userPwd:isLogin = Trueresult = userService.findUserByUserName(userName)if result and result[0][2] == hashlib.md5(userPwd.encode(encoding='utf-8')).hexdigest():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 rememberMe == 'false':response.set_cookie('userName', userName)response.set_cookie('userPwd', result[0][2])response.set_cookie('rememberMe', 'true')elif rememberMe == 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('userId')# user.user_pwd = hashlib.md5((userDict.get('userPwd')). encode(encoding='utf-8')).hexdigest()  # 表单提交的数据使用request.form[]# user.user_pic = userDict.get('userPic')# user.user_birth = datetime.strftime(userDict.get('userBirth'), '%Y-%m-%d')# user.user_sex = userDict.get('userSex')# user.user_intro = userDict.get('userIntro')result = TUser.objects.create(user_name=userDict.get('userId'),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)#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)# for tempUser, tdata in zip(result, data):#     tdata['fields']['user_deptname'] = tempUser.jobDept.dept_name   # 获取外键关联的时候,是第二次查询#     passreturnData = {'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:# 将上传文件拆分成多个块(当上传文件大于2.5MB时,自动拆分),使用文件对象.chunks()函数。for chunk in file.chunks():fp.write(chunk)except 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

jobtaskinfo.html

{% include 'top.html' %}
{% include 'left.html' %}
{% load static %}
<div class="content-wrapper"><!-- Content Header (Page header) --><section class="content-header"><h1>系统管理<small>任务信息管理</small></h1><ol class="breadcrumb"><li><a href="#"><i class="fa fa-dashboard"></i> 采集管理</a></li><li><a href="#">系统任务</a></li><li class="active">任务信息管理</li></ol></section><!-- Main content --><section class="content"><div class="row"><div class="col-xs-12"><div class="box"><div class="box-header"><h3 class="box-title">任务信息</h3></div><!-- /.box-header --><div class="box-body"><form method="post" name="searchForm" class="form-inline"><div class="form-group"><div class="form-group"><label class="control-label" for="taskTitle">任务名:</label><input type="text" name="taskTitle" class="form-control" id="taskTitle"/></div><div class="form-group"><label class="control-label" for="taskURL">任务地址: </label><input type="text" name="taskURL"  class="form-control" id="taskURL" /></div><input type="hidden" name="currentPage" value="1"/><input type="hidden" name="pageSize" value="10"/><button class="btn btn-primary" type="button"  οnclick="getJobTaskData(1, 10, 'search', 0)">查询</button></div></form><table class="table table-responsive table-bordered"><caption>{{ message }}</caption><thead><tr><th style="text-align: center;width: 80px;"><input type="button" value="全选"/></th><th>任务ID</th><th>任务名称</th><th style="width: 300px;word-wrap: break-word;overflow: hidden;">任务URL地址</th><th>操作</th></tr></thead><tbody id="dataBody"></tbody></table><div class="modal fade" id="modal-default"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button><h4 class="modal-title">修改任务信息</h4></div><div class="modal-body"><form method="post" name="taskForm">任务名称:<input type="text" name="taskTitle" />采集URL地址:  <input type="text" name="taskURL" /><input type="hidden" name="taskId"/><input type="hidden" name="currentPage" value="1"/><input type="hidden" name="pageSize" value="10"/></form></div><div class="modal-footer"><button type="button" class="btn btn-default pull-left" data-dismiss="modal">取消</button><button type="button" class="btn btn-primary" οnclick="getJobTaskData(1, 10, 'submitUpdate', 0)">保存</button></div></div><!-- /.modal-content --></div><!-- /.modal-dialog --></div></div><!-- /.box-body --></div><!-- /.box --></div><!-- /.col --></div><!-- /.row --></section><!-- /.content --></div><!-- /.content-wrapper -->
{% include 'footer.html' %}
<script type="text/javascript" src="{%  static 'js/jobtask.js' %}"></script>

manage.py

import os
import sysdef main():os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djangoproject.settings')try:from django.core.management import execute_from_command_lineexcept ImportError as exc:raise ImportError("Couldn't import Django. Are you sure it's installed and ""available on your PYTHONPATH environment variable? Did you ""forget to activate a virtual environment?") from excexecute_from_command_line(sys.argv)if __name__ == '__main__':main()

Python Django框架+jQuery Ajax实现CRUD相关推荐

  1. 基于Python Flask框架+jquery Ajax技术实现的增删改查(CRUD)+Ajax的异步文件上传

    运行界面(话不多说先上图) 运行之后的index界面,有登陆.注册功能 登陆界面,输入数据库中用户名.密码不为空且密码是加密的数据,进入main界面 注册界面,用的bootstrop的弹窗,用户名和密 ...

  2. Django框架 之 Ajax

    Django框架 之 Ajax 浏览目录 AJAX准备知识 AJAX与XML的比较 AJAX简介 jQuery实现的ajax AJAX参数 AJAX请求如何设置csrf_token 序列化 一.AJA ...

  3. ajax校验的优点,django框架中ajax的使用及避开CSRF 验证的方式详解

    本文实例讲述了django框架中ajax的使用及避开CSRF 验证的方式.分享给大家供大家参考,具体如下: ajax(Asynchronous Javascript And Xml) 异步javasc ...

  4. python网站设计理念_简单介绍下python Django框架的历史,设计理念及优势_Django讲解2...

    简单介绍下python Django框架的历史,设计理念及优势 Django是一个高层次的 Python Web 框架,它是一个鼓励快速开发和干净,实用的框架设计.Django可以更容易地快速构建更好 ...

  5. Python Django框架入门第一课

    Python Django框架入门 1.Django简介 Django使用python开发的一个免费的Web框架,几乎囊括了Web应用的方方面面,用于快速搭建高性能.优雅的网站. 2.配Django运 ...

  6. heroku_简单的Twitter:Heroku上的Play框架,AJAX,CRUD

    heroku 因此,重大的公告已经发布– Heroku开始为Play Framework应用程序提供本机支持! 如果您还没有听说过,请在Heroku的博客上查看Jesper Joergensen的帖子 ...

  7. 简单的Twitter:Heroku上的Play框架,AJAX,CRUD

    因此,重大的公告发布了– Heroku开始为Play Framework应用程序提供本机支持! 如果您还没有听说过,请在Heroku的博客上查看Jesper Joergensen的帖子 . 因此,对于 ...

  8. liunx+python+django框架实现图片生成二维码

    点击箭头处"蓝色字",免费领测试技术及面试资料! 余生皆欢喜 liunx+python+django框架实现二维码生成器 首先我简单的介绍下django:django官网解释就是如 ...

  9. 基于Python Django框架后端的微信小程序开发

    刚做完一个股票信息服务类的微信小程序(小程序名字"博股论基",大家有兴趣可以搜一下),也有一些心得,在这里记录一下开发过程,算是个开发笔记,同时也希望能给需要的同学一些帮助. -- ...

最新文章

  1. 做好新型冠状病毒防疫 |春节第一重任:说服爸妈带口罩
  2. 【SpringBoot】在普通类中获取spring容器中的bean
  3. NEC Programming Contest 2021 (AtCoder Beginner Contest 229)
  4. 英语口语-文章朗读Week10 Monday
  5. 关于微信小程序图标icon的五种实现方案
  6. 最小二乘支持向量机——LSSVM
  7. 运动轨迹 php,两种JS实现小球抛物线轨迹运动的方法
  8. Norms for Vectors and Matrices
  9. Java 二维码及条形码处理
  10. win10硬盘锁怎么解除_如何解锁BitLocker加密的Win10系统【图文教程】
  11. 智能手机内存完全透析
  12. 浅谈软件项目规模估计——怎么估?
  13. SpringCloud之蓝绿部署
  14. 【最新版】宝塔面板7.9.3企业版 开心破解版一键脚本
  15. 不得转载可以转发吗_微信公众号如何转发别人的文章,转载原创文章注意事项...
  16. 渗透之——使用Metasploit实现对缓冲区栈的溢出攻击
  17. 华为瘦终端ct5200 linux版,华为瘦终端 ct5100怎么恢复出厂设置
  18. mysql内幕微盘_MySQL核心内幕(祝定泽、张海、黄建昌) PDF 扫描版[29M]
  19. 喇叭天线的增益计算matlab源代码,(18—26.5)GHz喇叭天线近场增益的计算-易迪拓培训.PDF...
  20. 计算机在工商管理中的应用,计算机在企业管理中的应用.doc

热门文章

  1. 锂电池电压和电量的关系
  2. 微信分享功能,手机分享图片不显示
  3. 一起赚美金:Niche站变现案例分享(2)
  4. 某计算机系统20位地址线 8位数据线,同济大学2009-2010(1)微机原理期终考试试题(A卷)...
  5. c语言课程设计之黑白棋游戏,c语言课程设计黑白棋游戏.doc
  6. 2019年18种最有效推广的方式
  7. 用Python快速实现一个垃圾分类APP|附带微信小程序
  8. 李永乐复习全书线性代数 第五章 特征值、特征向量、相似矩阵
  9. 怎样用C语言编写病毒
  10. 【深度】信任区块链?可能时机还未到