python Web开发框架-Django (2)
来源:互联网 发布:启翔网络 编辑:程序博客网 时间:2024/04/27 16:42
接上篇文章,介绍一些实用的技巧和注意点。首次用MarkDown编辑,感觉行空隙太大,不是那么好看。
GET/POST
前后端会有数据交互,使用JQuery来实现get/post请求
GET
方法1:通过正则表达式匹配url传递参数
$.ajax({ type:"GET", url:"/search/serviceInfo/" + $('#servicename').val() + "/", dataType: 'json',//预期服务器返回的数据类型,我喜欢用json,当然你可以用xml/text/responseXML等 success: function(msg) { //获取服务端返回的数据 var logNames = msg['logName'];//读取json中的字段 document.getElementById('logs').innerHTML = logNames; },});
通过url路径传递参数,需要urls.py配置
//urls.pyurlpatterns = patterns('', (r'^search/serviceInfo/(.+)/$', 'searchText.getServiceInfo'),)//searchText.pydef getServiceInfo(request, servicename): result = {} //something about servicename return HttpResponse(json.dumps(result))
方法2:request parameter
//.ajax同上url:"/search/searchLog/?offset=" + tmpOffset + "&count=" + pageCount//后台获取参数,视图函数def searchLog(request): offset = request.GET.get('offset'); count = request.GET.get('count'); //something
POST
提交表单或者上传数据往往用post
//前端jslogConf = {};//something$.ajax({ type:"POST", url:"/setting/updschema/", data:JSON.stringify(logConf), dataType:'json', success: function(msg) { //something } });//后台py接收def addSchema(request): conf = json.loads(request.body) #中文转换,前端过来的数据是unicode格式,需要一次转码 logSchema.servicename = conf["servicename"].encode('utf8') logSchema.fields = json.dumps(conf['fields']) logSchema.monitorLines = json.dumps(conf['lines']) //something...
json对象和字符串的转换:在js和python中,json对象对应的是字典、序列,各脚本语言都提供的有字符串转为字典/序列对象、对象转为json串的方法。
//jsJSON.stringify(obj)将JSON转为字符串JSON.parse(string)将字符串转为JSON对象//pythonjson.dumps(obj)JSON转为字符串json.loads(str)字符串转为JSON
CSRF: Cross Site Request Forgery跨站请求伪造,为了确保请求的真实性django提供了防止csrf攻击的方法,在post时需要请求带上csrf token。所以使用post时会遇到csrf相关的错误,请求被拒绝。正规解决办法见django csrf protection。
后台程序员做的web服务多是内部使用,提供一个绕开csrf的方法。修改settings.py关掉csrf验证,如下
MIDDLEWARE_CLASSES = ( //....注释掉下面这行 #'django.middleware.csrf.CsrfViewMiddleware', //....)
数据返回
//后端返回页面或json数据#返回新页面return render_to_response('current_datetime.html')#返回json数据,result是一个字典return HttpResponse(json.dumps(result))
log使用
在settings.py中设置log
import loggingfrom logging.handlers import *from logging import Formatterroot = logging.getLogger()if len(root.handlers) == 0: #日志路径 filename = os.path.join(BASE_DIR,'log/tulip.log').replace('\\','/') #日志格式 format = '%(asctime)s %(levelname)s %(module)s.%(funcName)s Line:%(lineno)d %(message)s' #归档切换 rotate = TimedRotatingFileHandler(filename,"midnight",1,5) fmt = Formatter(format) rotate.setFormatter(fmt) root.addHandler(rotate)#log level,如下debug及其以上都会显示root.setLevel(logging.DEBUG)
在后台python中就可以直接使用log了:
import logginglogging.info(str)logging.debug(str)logging.warn(str)#....
前端
模板:搜bootstrap模板,可以看到很多漂亮简洁的前端模板
jquery:
//样式管理$('#servicenameErr').addClass('has-error');$('#servicenameErr').removeClass('has-error');//取值servicename = $('#servicename').val();//ajax$.ajax({});
HTML DOM:
//清除selector的option,很简单哟document.getElementById("logName").length = 0;//表格行删除document.getElementById('fieldTable').deleteRow(index);//表格行增加row =document.getElementById('fieldTable').insertRow(index);row.innerHTML = "xxx";//遍历表格var fieldRows = document.getElementById('fieldTable').rows;for (var i = 1; i < fieldRows.length; ++i) { var cells = fieldRows[i].cells; name = cells[0].childNodes[0].value;//单元格中有个input控件}//设置控件内容document.getElementById('xxx').innerHTML="";//可以带html标签document.getElementById('xxx').innerText ="";//纯文字
一款漂亮的alert-toastr:
toastr.options['positionClass'] = 'toast-top-center';toastr.options['timeOut'] = "1000";toastr.success('配置成功');
一款好用的日历控件-My97DatePicker
//注意到在onclick指出了日历的调用、日期格式、以及取值限制<script language="javascript" type="text/javascript" src="/static/My97DatePicker/WdatePicker.js"></script><input id="startTime" type="text" placeholder="起始时间" onClick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',maxDate:'#F{$dp.$D(\'endTime\')}'})"/><input id="endTime" type="text" placeholder="终止时间" onClick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',minDate:'#F{$dp.$D(\'startTime\')}'})"/>
参考资料
Django book: http://djangobook.py3k.cn/2.0/
Django下载:https://www.djangoproject.com/download/
bootstrap前端框架:http://www.bootcss.com/
JQuery:http://www.w3school.com.cn/jquery/
HTML DOM:http://www.w3school.com.cn/htmldom/
toastr:https://github.com/CodeSeven/toastr
My97DatePicker:http://www.my97.net/
django csrf:https://docs.djangoproject.com/en/dev/ref/csrf
- python Web开发框架-Django (2)
- Python Web开发框架Django
- python web开发框架 - 之 Django Request
- [Python] 使用Django开发Web框架
- python Web开发框架-Django (1)
- Python中Django框架开发web
- python web框架 - Django
- python web框架 Django
- Django--Python Web 框架
- python web框架 Django
- python下的web开发框架-Django,url配置
- python下的web开发框架-Django,建立模型
- python下的web开发框架-Django,创建项目
- 每周一荐:Python Web开发框架Django
- python web开发框架django安装和测试
- 新手开发基于Django框架的python web(一)
- 新手开发基于Django框架的python web(二)
- python的web开发框架django学习笔记
- HashMap经典存储案例,分拣思路_与面向对象组合解题
- SSH注解插入数据库时间类型 时分秒丢失的问题
- hdu 2444 The Accomodation of Students
- 【Android】下载文件:进度条和通知栏
- [iOS错误汇总]libc++abi.dylib: terminating with uncaught exception of type NSException
- python Web开发框架-Django (2)
- change dir color in terminal
- C++ 中SQLITE3 判断表是否存在
- android:largeHeap介绍
- 物联12:高频基站芯片--MF RC500介绍
- 使用VS调试Unity脚本
- mysql数据库中新建了表忘记设置ID自增长怎么办
- Mac OS发布是怎么写版本更新信息的
- 按位进行整形和字符型变量的转换