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的更多相关文章

  1. 有效使用Django的QuerySets

    对象关系映射 (ORM) 使得与SQL数据库交互更为简单,不过也被认为效率不高,比原始的SQL要慢. 要有效的使用ORM,意味着需要多少要明白它是如何查询数据库的.本文我将重点介绍如何有效使用 Dja ...

  2. Django——QuerySets酷毙了!

    Django的QuerySets酷毙了! 在本文中我将解释一下QuerySets是什么,它是如何工作的(如果你对它已经熟悉了,你可以直接跳到第二部分),我认为如果可以的话你应该总是返回QuerySet ...

  3. django性能优化

    1. 内存.内存,还是加内存 2. 使用单独的静态文件服务器 3. 关闭KeepAlive(如果服务器不提供静态文件服务,如:大文件下载) 4. 使用memcached 5. 使用select_rel ...

  4. Django 数据库查询优化

    Django数据层提供各种途径优化数据的访问,一个项目大量优化工作一般是放在后期来做,早期的优化是“万恶之源”,这是前人总结的经验,不无道理.如果事先理解Django的优化技巧,开发过程中稍稍留意,后 ...

  5. Django的性能优化

    Django的性能优化   一,利用标准数据库优化技术 传统数据库优化技术博大精深,不同的数据库有不同的优化技巧,但重心还是有规则的.在这里算是题外话,挑两点通用的说说: 索引,给关键的字段添加索引, ...

  6. Django : Security in Django

    Security in Django https://docs.djangoproject.com/en/1.10/topics/security/ 1 Cross site scripting (X ...

  7. Django中不返回QuerySets的API -- Django从入门到精通系列教程

    该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...

  8. django不返回QuerySets的API

    以下的方法不会返回QuerySets,但是作用非常强大,尤其是粗体显示的方法,需要背下来. 方法名 解释 get() 获取单个对象 create() 创建对象,无需save() get_or_crea ...

  9. 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 ...

随机推荐

  1. BZOJ 1901 & 整体二分

    题意: 带修改的区间第K小. SOL: 看了很久很久很久很久的整体二分,网上的各种题解也不是很多,也一直很不了解所谓的"贡献","将询问一起递归"是什么意思.. ...

  2. js的function

    1.funciton的js如果直接写是不会执行的 例如 function TableInit() { //var treeNode = $('#otherTree').omTree('getSelec ...

  3. Codeforces Round #244 (Div. 2) B. Prison Transfer

    题目是选出c个连续的囚犯,而且囚犯的级别不能大于t #include <iostream> using namespace std; int main(){ int n,t,c; cin ...

  4. ACM: 限时训练题解- Travelling Salesman-最小生成树

    Travelling Salesman   After leaving Yemen, Bahosain now works as a salesman in Jordan. He spends mos ...

  5. [BZOJ2803][Poi2012]Prefixuffix

    2803: [Poi2012]Prefixuffix Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 219  Solved: 95[Submit][St ...

  6. lsof用法简介

    lsof:一个功能强大的命令 lsof命令的原始功能是列出打开的文件的进程,但LINUX下,所有的设备都是以文件的行式存在的,所以,lsof的功能很强大!  [root@limt01 ~]# lsof ...

  7. java代码过滤emoji表情

    可以新建一个过滤器的类,在类中书写如下代码: public static String filterEmoji(String source) {           if(source != null ...

  8. (转载)zeromq使用注意点滴

    zeromq使用注意点滴 1.关于介绍zeromq的就不说了,可以自己去看官方guide很详细 2.主要说下在使用过程中需要注意的地方 1)使用如果使用c++的接口的时候,在你自己的类中或者apach ...

  9. ng-switch 指令

    <!--标准用法--> <div ng-switch on="showSecret"> <div ng-switch-when="true& ...

  10. Controller中使用过滤器

    app.controller('myCtrl',function($scope,$filter){     ... $filter('过滤器名称')(需要过滤的对象,参数1,参数2,...); ... ...