一, F  Q

   # F 使用查询条件的值
#
# from django.db.models import F
# models.Tb1.objects.update(num=F('num')+1) # Q 构建搜索条件
from django.db.models import Q
# con = Q()
#
# q1 = Q()
# q1.connector = 'OR'
# q1.children.append(('id', 1))
# q1.children.append(('id', 10))
# q1.children.append(('id', 9))
#
# q2 = Q()
# q2.connector = 'OR'
# q2.children.append(('c1', 1))
# q2.children.append(('c1', 10))
# q2.children.append(('c1', 9))
#
# con.add(q1, 'AND')
# con.add(q2, 'AND')
#
# models.Tb1.objects.filter(con) #
# from django.db import connection
# cursor = connection.cursor()
# cursor.execute("""SELECT * from tb where name = %s""", ['Lennon'])
# row = cursor.fetchone()

Django基于Q 实现ajax请求数据库

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.left{
float: left;
}
.clearfix:after{
content: '.';
clear: both;
display: block;
visibility: hidden;
height: 0;
}
</style>
</head>
<body>
<div class="condition">
<div class="item clearfix">
<div class="icon left" onclick="AddCondition(this);">+</div>
<div class="left">
<select onchange="ChangeName(this);">
<option value="name">书名</option>
<option value="book_type__caption">图书类型</option>
<option value="price">价格</option>
<option value="pages">页数</option>
</select>
</div>
<div class="left"><input type="text" name="name" /></div>
</div>
</div>
<div>
<input type="button" onclick="Search();" value="搜索" />
</div> <div class="container"> </div> <script src="/static/jquery-1.9.1.min.js"></script>
<script>
function AddCondition(ths) {
var new_tag = $(ths).parent().clone();
new_tag.find('.icon').text('-');
new_tag.find('.icon').attr('onclick', 'RemoveCondition(this);'); $(ths).parent().parent().append(new_tag);
}
function RemoveCondition(ths) {
$(ths).parent().remove();
}
function ChangeName(ths) {
var v = $(ths).val();
$(ths).parent().next().find('input').attr('name',v);
}
function Search() {
var post_data_dict = {}; // 获取所有input的内容,提交数据
$('.condition input').each(function () {
// console.log($(this)[0])
var n = $(this).attr('name');
var v = $(this).val();
var v_list = v.split(',');
post_data_dict[n] = v_list;
});
console.log(post_data_dict);
var post_data_str = JSON.stringify(post_data_dict);
$.ajax({
url: '/index/',
type: 'POST',
data: { 'post_data': post_data_str},
dataType: 'json',
success: function (arg) {
// 字符串 "<table>" +
if(arg.status){
var table = document.createElement('table');
table.setAttribute('border',1);
// [{,name,pubdate,price,caption},]
$.each(arg.data, function(k,v){
var tr = document.createElement('tr'); var td1 = document.createElement('td');
td1.innerText = v['name'];
var td2 = document.createElement('td');
td2.innerText = v['price'];
var td3 = document.createElement('td');
td3.innerText = v['book_type__caption'];
var td4 = document.createElement('td');
td4.innerText = v['pubdate'];
tr.appendChild(td1);
tr.appendChild(td2);
tr.appendChild(td3);
tr.appendChild(td4); table.appendChild(tr);
}); $('.container').empty();
$('.container').append(table);
}else{
alert(arg.message);
} } })
}
</script>
</body>
</html>

index.html

from django.shortcuts import render,HttpResponse
from app01 import models
# Create your views here.
import json
def test(request):
# models.BookType.objects.create(caption='技术')
# models.BookType.objects.create(caption='文学')
# models.BookType.objects.create(caption='动漫')
# models.BookType.objects.create(caption='男人装') # models.Book.objects.create(name='文艺复兴',pages='100',price='40',pubdate='1992-11-2',book_type_id='1')
# models.Book.objects.create(name='解密',pages='80',price='10', pubdate='2016-6-10',book_type_id='2')
# models.Book.objects.create(name='刀锋',pages='50',price='3', pubdate='2014-02-16',book_type_id='2')
# models.Book.objects.create(name='查令十字路84号',pages='260',price='40',pubdate='1999-10-12',book_type_id='3')
# models.Book.objects.create(name='红楼',pages='1000',price='500', pubdate='1760-1-1',book_type_id='3')
# models.Book.objects.create(name='将夜',pages='2000',price='300', pubdate='2010-3-3',book_type_id='1')
# models.Book.objects.create(name='mysql从删库到跑路',pages='20',price='10',pubdate='1998-9-2',book_type_id='4')
# models.Book.objects.create(name='马克思主义',pages='50',price='100',pubdate='1937-3-3',book_type_id='2') return HttpResponse('ok') import json
from datetime import date
from datetime import datetime
from decimal import Decimal
class JsonCustomEncoder(json.JSONEncoder): def default(self, field): if isinstance(field, datetime):
return field.strftime('%Y-%m-%d %H:%M:%S')
elif isinstance(field, date):
return field.strftime('%Y-%m-%d')
elif isinstance(field, Decimal):
return str(field)
else:
return json.JSONEncoder.default(self, field) def index(request):
if request.method == 'POST':
print(request.POST.get('post_data',None))
ret = {'status': False, 'message': '', 'data':None}
try:
post_data = request.POST.get('post_data',None)
post_data_dict = json.loads(post_data)
print(post_data_dict,type(post_data_dict))
# {'name': ['11', 'sdf'],'price': ['11', 'sdf']}
# 构造搜索条件
from django.db.models import Q
con = Q()
for k,v in post_data_dict.items():
q = Q()
q.connector = 'OR'
for item in v:
print(v,type(v))
q.children.append((k, item))
con.add(q, 'AND')
"""
ret = models.Book.objects.filter(con)
print(ret) # queryset,[对象] from django.core import serializers
data = serializers.serialize("json", ret)
print(type(data),data)
# 字符串
"""
"""
# ret = models.Book.objects.filter(con).values('name','book_type__caption')# 列表里面以字典的形式
# #ret = models.Book.objects.filter(con).values_list('name', 'book_type__caption')# 列表里面以元组的形式
#
# li = list(ret)
# data = json.dumps(li)
# print(data,type(data))
"""
result = models.Book.objects.filter(con).values('name','price','pubdate','book_type__caption')
# ret = models.Book.objects.filter(con).values_list('name', 'book_type__caption') li = list(result) ret['status'] = True
ret['data'] = li
except Exception as e:
ret['message'] = str(e)
ret_str = json.dumps(ret, cls=JsonCustomEncoder) return HttpResponse(ret_str)
return render(request, 'index.html')

Views.py

from django.db import models

# Create your models here.
class Author(models.Model):
name = models.CharField(max_length=20)
age = models.IntegerField() class BookType(models.Model):
caption = models.CharField(max_length=64) class Book(models.Model):
name = models.CharField(max_length=64)
pages = models.IntegerField()
price = models.DecimalField(max_digits=10, decimal_places=2)
pubdate = models.DateField() book_type = models.ForeignKey(BookType)

models

# 注意这个 是django自带的序列化 但是它不支持时间 小数等格式
ret = models.Book.objects.filter(con)
print(ret) # queryset,[对象] from django.core import serializers
data = serializers.serialize("json", ret)
print(type(data),data)
 # 字符串
这是通过 映射 取到值
"""
"""
# ret = models.Book.objects.filter(con).values('name','book_type__caption')# 列表里面以字典的形式
# #ret = models.Book.objects.filter(con).values_list('name', 'book_type__caption')# 列表里面以元组的形式
#
# li = list(ret)
# data = json.dumps(li)
# print(data,type(data))

python 之 Django 小案例的更多相关文章

  1. Python:通过一个小案例深入理解IO多路复用

    通过一个小案例深入理解IO多路复用 假如我们现在有这样一个普通的需求,写一个简单的爬虫来爬取校花网的主页 import requests import time start = time.time() ...

  2. Python的应用小案例

    1.python统计文本中每个单词出现的次数: #coding=utf-8__author__ = 'zcg' import collectionsimport os with open('abc.t ...

  3. python 客户端点对点通信小案例

    点对点通讯分为客户端和服务器,多个客户端通过服务器进行信息的交流 服务器端代码  service端 #!/usr/bin/env python # -*- coding:utf-8 -*- impor ...

  4. 6.Python使用Pandas小案例

    1.使用以下命令引入Pandas和xlrd,引入成功后在pycharm的setting导入即可使用(pip3是由于个人python版本为3.6)==在dos命令行输入以下信息 pip3 install ...

  5. 15.Selenium+Python滑动解锁小案例

    1.代码实现 from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChai ...

  6. Turtle绘图——python简单上手小案例

    Turtle绘图 Turtle模块提供了在二维平面上移动的环境. Turtle可以实现位置.航向和各种可能的状态和动作. import turtle as tu roo = tu.Turtle() # ...

  7. Django——9 博客小案例的实现

    Django  博客小案例的实现 主要实现博客的增删改查功能 主页index.html  -->  展示添加博客和博客列表的文字,实现页面跳转 添加页add.html  --> 输入文章标 ...

  8. Django 09 博客小案例

    Django 09 博客小案例 urls.py from django.urls import path from . import views urlpatterns = [ path('index ...

  9. python购物车小案例

    python购物车小案例# 案列描述:有一个小型水果店里面有水果(苹果:¥8/kg,香蕉:¥5/kg,芒果:¥15/kg,葡萄:¥12/kg),客户带了100元钱进店选购水果.# 1.客户输入相应序号 ...

随机推荐

  1. Oracle基础知识(一)、简介与安装

    文章提纲 Oracle简介与发展历程 安装实例(面向普通开发者) 一.Oracle简介与发展历程 中文名称甲骨文公司,全称为甲骨文股份有限公司(甲骨文软件系统有限公司).甲骨文已超越 IBM ,成为继 ...

  2. 摆脱Spring 定时任务的@Scheduled cron表达式的困扰

    一.背景 最近因为需要,需要适用Spring的task定时任务进行跑定时任务,以前也接触过,但是因为懒没有好好地理解@Scheduled的cron表达式,这次便对它做了一个全方位的了解和任务,记录下来 ...

  3. October 27th Week 44th Thursday 2016

    The art of being wise is the art of knowing what to overlook. 智慧之道在于懂得该忽略什么. Always do your best. Wh ...

  4. H5(一)

    HTML5目前最新的规范(标准)是2014年10月推出   2005年左右出现HTML5版本(非标准)     W3C组织(两个组织定义H5规范)   学习(研究)HTML5是学习未来(将来主流)   ...

  5. 基于EasyUI Treegrid的权限管理资源列表

    1. 前言 最近在开发系统权限管理相关的功能,主要包含用户管理,资源管理,角色管理,组类别管理等小的模块.之前的Web开发中也用过jQueryEasyUI插件,感觉这款插件简单易用,上手很快.以前用到 ...

  6. 关于安装CentOS 7 的注意事项

    1.安装VMware Workstation 2.安装CentOS的时候选择GNOME桌面 3.联网设置, VMWare Network Apapter VMnet8 设置IP4 自动获取IP地址,“ ...

  7. 多个supplemental logging的说明与删除

    有时候我们做ogg的时候,查看info trandata schema.table 无法查看到对应的supplement log信息, 但是我们查看table script的时候可以看到supplem ...

  8. [UWP]UWP App Data存储和获取

    这篇博客介绍如何在UWP开发时,如何存储App Data和获取. App Data是指用户的一些设定,偏好等.例如,App的主题,是否接收推送,离线接收消息等.需要区分下App Data和User D ...

  9. ubuntu_tftp服务搭建

    搭建过程: 1. sudo apt-get install tftpd-hpa tftp-hpa是客户端 tftpd-hpa是服务器端 2.建立目录 执行:mkdir /home/wmx/Deskto ...

  10. oracle函数简析

    (一).数值型函数(Number Functions) 数值型函数输入数字型参数并返回数值型的值.多数该类函数的返回值支持38位小数点,诸如:COS, COSH, EXP, LN, LOG, SIN, ...