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 ...
随机推荐
- CentOS6.4 安装SSDB
1.安装 wget --no-check-certificate https://github.com/ideawu/ssdb/archive/master.zipunzip mastercd ssd ...
- 一个动画 Label (走马观花)
UILabel中一个水平移动的Label UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(10, 10, 300, 300)]; U ...
- 洛谷 P1414 又是毕业季II Label:None
题目背景 “叮铃铃铃”,随着高考最后一科结考铃声的敲响,三年青春时光顿时凝固于此刻.毕业的欣喜怎敌那离别的不舍,憧憬着未来仍毋忘逝去的歌.1000多个日夜的欢笑和泪水,全凝聚在毕业晚会上,相信,这一定 ...
- hadoop CLASSNAME命令使用注意点
Hadoop中可是使用hadoop CLASSNAME命令.这个CLASSNAME就是你写好的类名.hadoop CLASSNAME命令类似于java classname. 使用hadoop CLAS ...
- (转)C#/.NET主线程与子线程之间的关系
一般 一个应用程序就对应一个进程,一个进程可有一个或多个线程,而一般有一个主线程. 有的博客上说“至少一个主线程”,这一说法持有怀疑 主线程与子线程之间的关系 ...
- 李洪强漫谈iOS开发[C语言-047]-数列求和
// // main.c // 53 - 数列求和 - 李洪强 // // Created by vic fan on 16/10/15. // Copyright © 2016年 李洪强. ...
- [LintCode] Parking Lot 停车场问题
Design a parking lot. see CC150 OO Design for details.1) n levels, each level has m rows of spots an ...
- Js分页插件,支持页面跳转
这里先给出API: 你只需要提供一个对象涉及以下几项属性,你来设置属性值,通过jq对象链式调用page()以参数形式来加载这个对象,按照参数要求会自动生成分页功能, 参数中pageEvent是可以让你 ...
- zk listbox 点击列标题实现排序功能
前台(test.zul): <?page title="测试" contentType="text/html;charset=UTF-8"?> &l ...
- 判断pc端还是移动,并给移动加上其它的样式文件方法
所有移动端PC端 按 640 进行排版 body, html { width: %; height: %; overflow: hidden; background-color: #; } bod ...