接上篇文章,介绍一些实用的技巧和注意点。首次用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.py
urlpatterns = patterns('',
(r'^search/serviceInfo/(.+)/$', 'searchText.getServiceInfo'),
)
//searchText.py
def 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

//前端js
logConf = {};
//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串的方法。

//js
JSON.stringify(obj)将JSON转为字符串
JSON.parse(string)将字符串转为JSON对象
//python
json.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 logging
from logging.handlers import *
from logging import Formatter
root = 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 logging
logging.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)的更多相关文章

  1. 全面解读Python Web开发框架Django

    全面解读Python Web开发框架Django Django是一个开源的Web应用框架,由Python写成.采用MVC的软件设计模式,主要目标是使得开发复杂的.数据库驱动的网站变得简单.Django ...

  2. 全面解读Python Web开发框架Django,利用Django构建web应用及其部署

    全面解读Python Web开发框架Django Django是一个开源的Web应用框架,由Python写成.采用MVC的软件设计模式,主要目标是使得开发复杂的.数据库驱动的网站变得简单.Django ...

  3. Python Web开发框架Django

    花了两周时间,利用工作间隙时间,开发了一个基于Django的项目任务管理Web应用.项目计划的实时动态,可以方便地被项目成员查看(^_^又重复发明轮子了).从前台到后台,好好折腾了一把,用到:HTML ...

  4. 分分钟教你Python Web开发框架Django

    Python除了爬虫.深度学习(人工智能).数据分析等外,还可以用来开发网站系统,如我们常见的知乎,豆瓣等都是用Python开发的网站系统. 今天辰哥就来教大家如何新建属于自己的Django项目,让D ...

  5. python Web开发框架-Django (1)

    以前用web.py(另外一款轻量级web开发框架)做一个监控管理平台,没有做特别的记录就不好拾起来.最近做一个日志聚合系统,使用的是django,这次就记下来,方便查询. Django是一个高效的we ...

  6. 5个最好的Python Web开发框架

    Python是最受欢迎的和最有效率的开发语言之一.Python能让你更快完成工作,并且更有效地集成系统.Python是动态的面向对象的语言.即便你刚刚开始学习Python,也立即就能获得生产力上的提升 ...

  7. 我的第一个python web开发框架(14)——后台管理系统登录功能

    接下来正式进入网站的功能开发.要完成后台管理系统登录功能,通过查看登录页面,我们可以了解到,我们需要编写验证码图片获取接口和登录处理接口,然后在登录页面的HTML上编写AJAX. 在进行接口开发之前, ...

  8. Python web(Django)连接Sql server

    (开开心心每一天~ ---虫瘾师) Python Web(Django) 与SQL SERVRE的连接----Come QQ群:607021567(里面有很多开源代码和资料,并且python的游戏也有 ...

  9. Python Web(Django)与SQL SERVER的连接处理

    (开开心心每一天~ ---虫瘾师) Python Web(Django) 与SQL SERVRE的连接----Come QQ群:607021567(里面有很多开源代码和资料,并且python的游戏也有 ...

随机推荐

  1. 16条Web2.0法则的编程思想

    1.在你开始之前,先定一个简单的目标.无论你是一个Web 2.0应用的创建者还是用户,请清晰的构思你的目标.就像“我需要保存一个书签”或者“我准 备帮助人们创建可编辑的.共享的页面”这样的目标,让你保 ...

  2. 对button或radiobutton制作样式

    制作样式在drawable中进行 (cheakbox)在样式中点击变换图片,<selector> <item android:state_checked="true&quo ...

  3. AOP实现原理

    Spring 为解耦而生,其中AOP(面向切面编程)是很浓重的一笔. 本文来探讨一下AOP实现的原理. 一. 概述 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负 ...

  4. vs的一些配置

    C/C++  ->  常规  ->  附加包含目录    添加头文件位置.例如 $(ProjectDir)..\..\MsUtil\MsTools\include C/C++  -> ...

  5. jfinal框架页面找不到相关css,js文件404

    在JFinalConfig中添加配置: @Override public void configHandler(Handlers handlers) { handlers.add(new Contex ...

  6. 将excel数据导入到mysql的方法

    文本框被键盘遮挡到了,不会再获取焦点的时候被顶到键盘顶部.解决方案:设置A的Position为绝对定位absolute即可,其他几种定位方式未测试,但是不能是fixed ,正是因为这种定位方式,导致它 ...

  7. ODBC,OLEDB,ADO,ADO.net,JDBC 理解

    一 .ODBC 开放式数据库互联(Open Database connectivity), 93年微软推出的实现应用程序 和关系数据库直接 通讯的借口标准.只能用于关系数据库 . 注意事项 : 必须先 ...

  8. 用Ant实现Java项目的自动构建和部署

    原文地址:http://tech.it168.com/j/2007-11-09/200711091344781.shtml         本文请勿转载! Ant是一个Apache基金会下的跨平台的构 ...

  9. Cobbler学习之一--Fedora17下配置Cobbler安装环境

    1:Cobbler是什么 Cobbler是一大Linux装机利器,可以快速的建立网络安装环境. 2:安装Cobbler需要的组件 createrepo httpd (apache2 for Debia ...

  10. HDU 2068 RPG的错排

    要求答对一半或以上就算过关,请问有多少组答案能使他顺利过关. 逆向思维,求答错一半或以下的组数 1,错排 错排公式的由来 pala提出的问题: 十本不同的书放在书架上.现重新摆放,使每本书都不在原来放 ...