django book querysets
from __future__ import unicode_literals
from django.db import models
from django.contrib.auth.models import User # Create your models here. class Host(models.Model):
hostname=models.CharField(max_length=)
ip=models.GenericIPAddressField(unique=True)
port=models.IntegerField(default=)
system_type_choices=(
('linux','LINUX'),
('Win64','WIN64'),
)
system_type=models.CharField(choices=system_type_choices,max_length=)
enable = models.BooleanField(default=True)
create_date = models.DateTimeField()
online_date = models.DateTimeField(auto_now_add=True)
groups=models.ManyToManyField('HostGroup')
idc = models.ForeignKey('IDC' ) def __unicode__(self):
return self.hostname class IDC(models.Model):
name = models.CharField(max_length=,unique=True)
def __unicode__(self):
return self.name class HostGroup(models.Model):
name = models.CharField(max_length=,unique=True)
def __unicode__(self):
return self.name class UserProfile(models.Model):
user = models.OneToOneField(User)
name = models.CharField(max_length=,unique=True)
host_groups = models.ManyToManyField('HostGroup',blank=True,null=True)
hosts= models.ManyToManyField('Host',blank=True,null=True) 模糊查询,contains是包含
models.Host.objects.filter(system_type='LINUX',hostname__contains='o')
结果是一个列表 [<Host: localhost>, <Host: ubuntu>, <Host: jindie>] 精确查询,如果有出现多个,结果将报错
models.Host.objects.get(system_type='LINUX',hostname__contains='o') id大于1的查询
models.Host.objects.filter(id__gt=) id in 列表查询
models.Host.objects.filter(id__in=[,,,,]) 创建第一种方法:models.Host.objects.create
import datetime
datetime.datetime.now()
(1) 写入数据库除了多对对
models.Host.objects.create(
hostname = 'OA',
ip = '1.1.1.5',
port = ,
system_type = 'WIN64',
idc_id =, #或者 idc = models.IDC.objects.get(name='万达机房')
create_date = datetime.datetime.now(),
online_date = datetime.datetime.now(),
)
(2) 查询刚插入的数据信息(实例)
h = models.Host.objects.get(hostname='OA')
(3) 查询多对多表的所有数据(实例)
all_groups = models.HostGroup.objects.all()
(4)把groups表的数据插入到Host表
h.groups.add(*[i.id for i in all_groups])
#删除 h.groups.remove(*[i.id for i in all_groups])
#可以传入字典 h.groups.add(**{'a':1,'b':2})
####################################################
创建的第二种方法,不查找,直接添加,models.Host (1)
h = models.Host(
hostname = 'OA',
ip = '1.1.1.5',
port = ,
system_type = 'WIN64',
idc_id =,
create_date = datetime.datetime.now(),
)
(2)
h.save()
(3)
all_groups = models.HostGroup.objects.all()
(4)
h.groups.add(*[i.id for i in all_groups]) ##############################################
update
h.hostname = 'feng'
h.save models.Host.objects.filter().update(port=) ##############################################
delete
models.Host.objects.filter(hostname='OA').delete() ################################################# 跨表查询,从用户表查询
a = models.UserProfile.objects.last()
a.host_groups.select_related()
a.hosts_select_related() #################################### 判断用户是否登陆成功后,返回{{request.user}}
{% if request.user.is_authenticated %}
{{request.user}}
{%else%}
<a href="/login">退出</a> html编写 <div>
{{ request.user.userprofile.hosts.select_related }}
<ul>
{% for group in request.user.userprofile.host_groups.select_related %}
<li>{{ group.name }}</li>
<ul>
{% for host in group.host_set.select_related %}
<li>{{ host.hostname }}----->{{ host.ip }}---{{ host.idc.name }}</li>
{% endfor %}
</ul>
{% endfor %}
</ul> ############################### views #!/usr/bin/env python
#_*_ coding:utf- _*_
from django.shortcuts import render,redirect,HttpResponse,HttpResponseRedirect
from django.template.context import RequestContext
from django.contrib.auth import authenticate,login,logout
from django.contrib.auth.decorators import login_required #装饰器,不登陆,不能访问其他页面
import models @login_required()
def host(request):
return render(request,'host.html') def acc_login(request):
ret = {'status':""}
if request.method == 'POST':
print request.POST
username = request.POST.get('username',None)
password= request.POST.get('password',None)
user = authenticate(username=username,password=password)#验证用户名,密码
if user is not None:
login(request,user) #如果不做这个动作,后台login还是没有登陆的,其他页面不能访问,其实就是差一个session
return HttpResponseRedirect('/')
else:
ret['status']='用户名或者密码错误'
return render(request, 'login.html', ret)
else:
return render(request,'login.html')
@login_required()
def index(request):
return render(request,'index.html') @login_required()
def asset(request):
return render(request,'asset.html') @login_required()
def acc_logout(request):
logout(request)
return HttpResponseRedirect('login.html')
django book querysets的更多相关文章
- 有效使用Django的QuerySets
对象关系映射 (ORM) 使得与SQL数据库交互更为简单,不过也被认为效率不高,比原始的SQL要慢. 要有效的使用ORM,意味着需要多少要明白它是如何查询数据库的.本文我将重点介绍如何有效使用 Dja ...
- Django——QuerySets酷毙了!
Django的QuerySets酷毙了! 在本文中我将解释一下QuerySets是什么,它是如何工作的(如果你对它已经熟悉了,你可以直接跳到第二部分),我认为如果可以的话你应该总是返回QuerySet ...
- django性能优化
1. 内存.内存,还是加内存 2. 使用单独的静态文件服务器 3. 关闭KeepAlive(如果服务器不提供静态文件服务,如:大文件下载) 4. 使用memcached 5. 使用select_rel ...
- Django 数据库查询优化
Django数据层提供各种途径优化数据的访问,一个项目大量优化工作一般是放在后期来做,早期的优化是“万恶之源”,这是前人总结的经验,不无道理.如果事先理解Django的优化技巧,开发过程中稍稍留意,后 ...
- Django的性能优化
Django的性能优化 一,利用标准数据库优化技术 传统数据库优化技术博大精深,不同的数据库有不同的优化技巧,但重心还是有规则的.在这里算是题外话,挑两点通用的说说: 索引,给关键的字段添加索引, ...
- Django : Security in Django
Security in Django https://docs.djangoproject.com/en/1.10/topics/security/ 1 Cross site scripting (X ...
- Django中不返回QuerySets的API -- Django从入门到精通系列教程
该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...
- django不返回QuerySets的API
以下的方法不会返回QuerySets,但是作用非常强大,尤其是粗体显示的方法,需要背下来. 方法名 解释 get() 获取单个对象 create() 创建对象,无需save() get_or_crea ...
- Paginator Django 分页 When QuerySets are evaluated QuerySets 执行原理 QuerySets are lazy 惰性执行 访问db取数据的时机
https://docs.djangoproject.com/en/2.2/topics/pagination/ Paginator objects¶ The Paginator class has ...
随机推荐
- 为OpenResty增加nginx_upload_module模块
1.下载 http://www.grid.net.ru/nginx/download/nginx_upload_module-2.2.0.tar.gz 或 http://pan.baidu.com/s ...
- NOIP欢乐模拟赛 T2 解题报告
小澳的坐标系 (coordinate.cpp/c/pas) [题目描述] 小澳者表也,数学者景也,表动则景随矣. 小澳不喜欢数学,可数学却待小澳如初恋,小澳睡觉的时候也不放过. 小澳的梦境中出现了一个 ...
- SQL Server 插入数据后获得自增主键值
通过SQLServer系统自带函数获取 String sql = "insert into goods values('" + TextBox1.Text + "',&q ...
- 纪念逝去的岁月——C/C++二分查找
代码 #include <stdio.h> int binarySearch(int iList[], int iNum, int iX, int * pPos) { if(NULL == ...
- onselectstart
以前在做图片滚动时,在双击左右箭头,快速切换图片滚动时,会选择附近区域的文字,感觉不是很好,今天在同事在分享时,讲到了这个问题, 试了一下,不错,解决了问题IE及Chrome下的方法一样,对相应的元素 ...
- Jfinal验证码功能
//验证码工具类 import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.B ...
- Linux中下载、解压、安装文件
一.将解压包发送到linux服务器上: 1.在windos上下载好压缩包文件后,通过winscp等SFTP客户端传送给linux 2.在linux中通过wget命令直接下载 #wget [选项] [下 ...
- HDU 2955
Robberies Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- Learn ZYNQ Programming(1)
GPIO LED AND KEY: part1:gpio leds and gpio btns combination. (include 1~4) part2:use gpio btns inter ...
- dede数据库类使用方法 $dsql
dedecms的数据库操作类,非常实用,在二次开发中尤其重要,这个数据库操作类说明算是奉献给大家的小礼物了. 引入common.inc.php文件 require_once (dirname(__FI ...