一、django的安装

  1.先安装python

  2.再安装django:pip install django

  3.使用虚拟环境:pip install virtualenv

二、项目的创建

  1.可以先创建一个虚拟目录

    创建虚拟目录:
        virtualenv --no-site-packages venv
    进入虚拟目录:
        source venv/bin/activate

  2.创建一个工程:

    创建:

      django-admin startproject projectName

    目录结构大致如下:

      

    启动服务:
        python manage.py runserver 0.0.0.0:8000

  3.创建app:

    进入projectName目录下运行:python manage.py startapp appName

    目录结构大致如下:

      

  4.创建模型:

    1.编辑model.py文件:如添加如下代码

 from django.db import models
from django.utils import timezone
import datetime
# Create your models here. class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published') def __str__(self): # __unicode__ on Python 2
return self.question_text def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
was_published_recently.admin_order_field = 'pub_date'
was_published_recently.boolean = True
was_published_recently.short_description = 'Published recently?' class Choice(models.Model):
question = models.ForeignKey(Question)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0) def __str__(self): # __unicode__ on Python 2
return self.choice_text

    注:类中相应的属性,对于数据库中表的相应列名

    2.编辑setting.py文件:

      1)修改数据库配置信息:(根据自己的数据库配置)

        DATABASES = {
          'default':{
          'ENGINE':'django.db.backends.mysql',
          'NAME':'pythontest',
          'USER':'root',
          'PASSWORD':'root',
          'HOST':'localhost',
          'PORT':'3306',
          }
        }

      2)修改INSTALLED_APPS,添加app:

        INSTALLED_APPS = [
          'django.contrib.admin',
          'django.contrib.auth',
          'django.contrib.contenttypes',
          'django.contrib.sessions',
          'django.contrib.messages',
          'django.contrib.staticfiles',
          'appName',
        ]

    3.同步数据库:(项目根目录下执行)

      python manage.py makemigrations polls
         python manage.py migrate

------------------------------------------------------------------------------------------------

一.操作数据库

1.创建对象--save()

  obejct = Object(name1='value1', name2='value2')

  object.save()

  others:

  object = Object.objects.create(name1='value1', name2='value2')

2.保存对象的改动

  object.name1 = 'change value'

  object.save()

  更新ForeignKey 字段的方式和保存普通字段相同

  更新ManyToManyField 的方式有一些不同 —— 需要使用字段的add()方法来增加关联关系的一条记录。

3.获取对象:通过模型的管理器构造一个查询集,来从数据库中获取对象

  管理器只可以通过模型的类访问,而不可以通过模型的实例访问

  获取所有对象:all_object = Object.objects.all()

    all() 方法返回了一个包含数据库表中所有记录查询集

  过滤条件:filter(**kwargs)、exclude(**kwargs)

    filter(**kwargs):包含满足查询参数的对象

    exclude(**kwargs):包含不满足查询参数的对象

  链式过滤:Object.objects.filter(...).exclude(...).filter(......)

  查询集是惰性执行的:创建查询集不会带来任何数据库的访问。你可以将过滤器保持一整天,直到查询集 需要求值时,Django 才会真正运行这个查询。

  获取单一的对象:Object.objects.get(pk=1)   !!!不是返回查询集,如果对象不存在或有多条将报错

4.annotate(*args, **kwargs)

5.order_by()用来排序:默认情况下,QuerySet 根据模型Meta 类的ordering 选项排序

  Object.objects.filter(pud_date__year=2017).order_by('-pub_date','headline'):根据pub_date降序,headline升序排序

  每个order_by() 都将清除前面的任何排序。

6.reverse()

  reverse() 方法反向排序QuerySet 中返回的元素

7.distinct([*fields])

  返回一个在SQL 查询中使用SELECT DISTINCT的新QuerySet。它将去除查询结果中重复的行。

  对于正常的distinct()调用,数据库在确定哪些行不同时比较每行中的每个字段。对于具有指定字段名称的distinct()调用,数据库将仅比较指定的字段名称。

8.values(*fields)

  返回一个ValuesQuerySet —— QuerySet 的一个子类,迭代时返回字典而不是模型实例对象。

  Object.objects.values('id','name')

9.values_list(*fields,flat=False)

  在迭代时返回的是元组而不是字典

10.dates(field,kind,order='ASC')

  返回DateQuerySet - QuerySet,其计算结果为datetime.date对象列表,表示特定种类的所有可用日期QuerySetfield应为模型的DateField的名称。 kind应为"year""month""day"。隐式的是升序排序

11.datetimes(field_name,kind,order='ASC',tzinfo=None)

  返回QuerySet,其计算为datetime.datetime对象的列表,表示QuerySet内容中特定种类的所有可用日期.

  field_name应为模型的DateTimeField的名称。

  kind应为“year”“month”“day”“hour”“minute”“second”

12.extra(select=Nonewhere=Noneparams=Nonetables=Noneorder_by=Noneselect_params=None)

13.defer(*fields)

  在一些复杂的数据建模情况下,您的模型可能包含大量字段,其中一些可能包含大量数据(例如,文本字段),或者需要昂贵的处理来将它们转换为Python对象。如果您在某些情况下使用查询集的结果,当您最初获取数据时不知道是否需要这些特定字段,可以告诉Django不要从数据库中检索它们。

  具有延迟字段的查询集仍将返回模型实例

14.only(*fields)

  only()方法或多或少与defer()相反

15.using(alias)

  如果你使用多个数据库,这个方法用于控制QuerySet 将在哪个数据库上求值。这个方法的唯一参数是数据库的别名,定义在DATABASES

16.select_for_update(nowait=False)

  返回一个 queryset  ,会锁定相关行直到事务结束。在支持的数据库上面产生一个SELECT ...FORUPDATE语句

17.raw(raw_queryparams=Nonetranslations=None)

  接收一个原始的SQL 查询,执行它并返回一个django.db.models.query.RawQuerySet 实例。这个RawQuerySet 实例可以迭代以提供实例对象,就像普通的QuerySet 一样。

18.使用Q 对象进行复杂的查询

  可以组合& 和|  操作符以及使用括号进行分组来编写任意复杂的Q 对象。同时,Q 对象可以使用~ 操作符取反,这允许组合正常的查询和取反(NOT) 查询:

Q(question__startswith='Who') | ~Q(pub_date__year=2005)
Poll.objects.get(
Q(question__startswith='Who'),
Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6))
)
翻译sql:
SELECT * from polls WHERE question LIKE 'Who%'
AND (pub_date = '2005-05-02' OR pub_date = '2005-05-06')

19.为了比较两个模型实例,只需要使用标准的Python 比较操作符,即双等于符号:==。在后台,它会比较两个模型主键的值。

20.删除方法,为了方便,就取名为delete()。这个方法将立即删除对象且没有返回值。

Entry.objects.filter(pub_date__year=2005).delete()

21.拷贝模型实例

  最简单的方法是,只需要将pk 设置为None。利用我们的Blog 示例: 

  blog = Blog(name='My blog', tagline='Blogging is easy')
  blog.save() # blog.pk == 1
  blog.pk = None
  blog.save() # blog.pk == 2

---------------------------------------------------------------------------------------------

二、聚合

1.一般的聚合查询方法:

  Object.objects.count()

  Object.objects.all().aggregate(Avg('price'))

  Object.objects.all().aggregate(Max('price'))

  Object.objetcs.annotate(num_books=Count('book')).order_by('num_books')[:5]

  aggregate()QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值对的字典。键的名称是聚合值的标识符,值是计算出来的聚合值。

  逐个对象的汇总结果可以由annotate()子句生成。当annotate()子句被指定之后,QuerySet中的每个对象都会被注上特定的值。

  annotate()子句的返回结果是一个查询集 (QuerySet)

  order_by()用来排序

  Object.objects.all().order_by('name1')

  values()分组

  Object.objects.values('name').annotate(average_rating=Avg('book__rating'))

  根据定义在values()  子句中的字段组合先对结果进行唯一的分组,再根据每个分组算出注解值, 这个注解值是根据分组中所有的成员计算而得的

  

  

  

  

Django--20170905--笔记的更多相关文章

  1. Django 学习笔记之四 QuerySet常用方法

    QuerySet是一个可遍历结构,它本质上是一个给定的模型的对象列表,是有序的. 1.建立模型: 2.数据文件(test.txt) 3.文件数据入库(默认的sqlite3) 入库之前执行 数据库同步命 ...

  2. Django 学习笔记之三 数据库输入数据

    假设建立了django_blog项目,建立blog的app ,在models.py里面增加了Blog类,同步数据库,并且建立了对应的表.具体的参照Django 学习笔记之二的相关命令. 那么这篇主要介 ...

  3. Django学习笔记(五)—— 表单

    疯狂的暑假学习之  Django学习笔记(五)-- 表单 參考:<The Django Book> 第7章 1. HttpRequest对象的信息 request.path         ...

  4. Django学习笔记(三)—— 型号 model

    疯狂暑期学习 Django学习笔记(三)-- 型号 model 參考:<The Django Book> 第5章 1.setting.py 配置 DATABASES = { 'defaul ...

  5. Django入门笔记

    Django入门笔记 **文档包含Django安装包.学习的笔记.代码等 安装 Django参考附件,只需要把附件拷贝到你需要的目录就行.Django是1.8.16版本 Python:在附件中,其中有 ...

  6. Django 学习笔记(二)

    Django 第一个 Hello World 项目 经过上一篇的安装,我们已经拥有了Django 框架 1.选择项目默认存放的地址 默认地址是C:\Users\Lee,也就是进入cmd控制台的地址,创 ...

  7. Django 学习笔记(五)模板标签

    关于Django模板标签官方网址https://docs.djangoproject.com/en/1.11/ref/templates/builtins/ 1.IF标签 Hello World/vi ...

  8. Django 学习笔记(四)模板变量

    关于Django模板变量官方网址:https://docs.djangoproject.com/en/1.11/ref/templates/builtins/ 1.传入普通变量 在hello/Hell ...

  9. Django 学习笔记(三)模板导入

    本章内容是将一个html网页放进模板中,并运行服务器将其展现出来. 平台:windows平台下Liunx子系统 目前的目录: hello ├── manage.py ├── hello │ ├── _ ...

  10. Django 学习笔记(七)数据库基本操作(增查改删)

    一.前期准备工作,创建数据库以及数据表,详情点击<Django 学习笔记(六)MySQL配置> 1.创建一个项目 2.创建一个应用 3.更改settings.py 4.更改models.p ...

随机推荐

  1. Atitit.分布式远程调用  rpc  rmi  CORBA的关系

    Atitit.分布式远程调用  rpc  rmi  CORBA的关系 1. 远程调用(包括rpc,rmi,rest)1 2. 分布式调用大体上就分为两类,RPC式的,REST式的1 3. RPC(远程 ...

  2. poj 2524 Ubiquitous Religions 一简单并查集

    Ubiquitous Religions   Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 22389   Accepted ...

  3. mysql 索引 大于等于 走不走索引 最左前缀

    你可以认为联合索引是闯关游戏的设计 例如你这个联合索引是state/city/zipCode 那么state就是第一关 city是第二关, zipCode就是第三关 你必须匹配了第一关,才能匹配第二关 ...

  4. FreeRtos——多任务

    官方资料整理测试: 多任务和单任务几乎没有差别.只用多创建一个或多个任务,其他地方和单任务时相同. static void AppTaskCreate(void) { xTaskCreate(vTas ...

  5. love2d--glsl03噪声

    由于一些glsl的教程都是3d的,而love是2d的,所以之后以示例为主,我会收集 一些love的shader,分类讲解. 此文简译自love2d社区博客,这里略去作者的自我介绍. 像素着色器入门 示 ...

  6. 【基础练习】【区间DP】codevs2102 石子归并2(环形)题解

    题目描写叙述 Description 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次仅仅能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出1个 ...

  7. Android基础总结(八)Service

    服务两种启动方式(掌握) startService 开始服务,会使进程变成为服务进程 启动服务的activity和服务不再有一毛钱关系 bindService 绑定服务不会使进程变成服务进程 绑定服务 ...

  8. asp.net 正在加载/处理(兼容IE Chrome)

    正在加载分两种 一种是页面初始化效果,也就是数据读取前,这个时候需要用ajax先显示读取中数据,当ajax回调的时候,读取页面数据 一种是界面读取中效果,就是用div显示,当OnPreRenderCo ...

  9. Linux 复制、移动覆盖文件不提示

    # vi ~/.bashrc   如果你看到如下内容,以下命令都会用别名执行了,就是说自动加了 -i 参数 alias rm='rm -i'alias cp='cp -i'alias mv='mv - ...

  10. 32Mybatis_mybatis逆向工程自动生成代码

    实际工作中要用的.很重要! mybaits需要程序员自己编写sql语句,mybatis官方提供逆向工程 可以针对单表自动生成mybatis执行所需要的代码(mapper.java,mapper.xml ...