目标应用:

  • 一个公开的网站,可以让访客查看投票的结果并让他们进行投票。
  • 一个后台管理网站,你可以添加、修改和删除选票。

查看django版本

  python -c "import django; print(django.get_version())"

2.1创建一个项目

   django-admin startproject mysite

mange.py:命令行工具
mysite/:项目的真正python包,导入时需要使用python包名字,如mysite.urls
mysite/setting.py:Django项目的配置
mysite/urls.py:Django站点的目录
mysite/wsgi.py:用于项目的WSGI兼容的Web服务器入口

2.2数据库的建立

    默认数据库使用SQLite,在setting.py文件的DATABASES‘default’中,可以修改数据库设置。ENGINE为支持的数据库,NAME为数据库名称,默认为os.path.join(BASE_DIR, 'db.sqlite3')
 
python manage.py migrate 根据数据库设置自动创建数据库表
python manage.py runserver 启动Django开发服务器,默认端口8000
python manage.py runserver 8080 使用8080端口
python manage.py runserver 0.0.0.0:8000 其他电脑上展示

2.3创建模型

    项目:项目是一个特定网站中相关配置和应用的集合。
    应用:应用是一个Web应用程序,它完成具体的事项——比如一个博客系统、一个存储公共档案的数据库或者一个简单的投票应用。可以运用于多个项目。
    开发环境建立后,使用python manage.py startapp polls创建应用。
结构如下
polls/
__init__.py
admin.py
migrations/
__init__.py
models.py
tests.py
views.py

    当编写一个数据库驱动的Web应用时,第一步就是定义该应用的模型 —— 本质上,就是定义该模型所对应的数据库设计及其附带的元数据。
    这个简单的投票应用中,我们将创建两个模型: QuestionChoice
polls/models.py
from django.db import models
#通过Field类的实例表示字段,告诉Django,每个字段中保存着什么类型的数据。
class Question(models.Model):
question_text = models.CharField(max_length=200)#字符字段
pub_date = models.DateTimeField('date published')#日期字段 class Choice(models.Model):
question = models.ForeignKey(Question) #ForeignKey定义了一个关联。它告诉Django每个Choice都只关联一个Question
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)

2.4激活模型

    第一步.告诉项目polls应用安装

再次编辑mysite/settings.py文件,并修改INSTALLED_APPS设置以包含字符串'polls'。所以它现在是这样的:

mysite/settings.py
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'polls',
)
    第二步.为应用创建数据库表
    python manage.py makemigrations polls为这些修改创建迁移文件
    python manage.py migrate将这些改变更新到数据库中。

2.5玩转API

先修改models.py,添加__str__()方法给Question和Choice,不仅会使你自己在使用交互式命令行时看得更加方便,而且会在Django自动生成的管理界面中使用对象的这种表示。
polls/models.py
from django.db import models class Question(models.Model):
# ...
def __str__(self): r
return self.question_text class Choice(models.Model):
# ...
def __str__(self):
return self.choice_text
python manage.py shell 
进入python环境,;路径为mysite/setting.py文件的路径
>>> from polls.models import Question, Choice
# 导入刚写的模型
# 查看所有对象
>>> Question.objects.all()
[]
#使用timezone代替datetime.now()防止出错 >>> from django.utils import timezone
>>> q = Question(question_text="What's new?", pub_date=timezone.now()) #保存对象
>>> q.save()
>>> q.id
1
#查看属性
>>> q.question_text
"What's new?"
>>> q.pub_date
datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=<UTC>) # 改变属性
>>> q.question_text = "What's up?"
>>> q.save() # 查看所有对象
>>> Question.objects.all()
[<Question: Question object>]


添加一个自定义方法
polls/models.py
import datetime from django.db import models
from django.utils import timezone class Question(models.Model):
# ...
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
保存这些改动,然后通过python manage.py shell再次打开一个新的Python 交互式shell:
>>> from polls.models import Question, Choice

>>> Question.objects.all()
[<Question: What's up?>] # Django提供了一个丰富的数据库查找API,通过关键字查找。
>>> Question.objects.filter(id=1)
[<Question: What's up?>]
>>> Question.objects.filter(question_text__startswith='What')
[<Question: What's up?>] # 获取与今年年份相等的对象
>>> from django.utils import timezone
>>> current_year = timezone.now().year
>>> Question.objects.get(pub_date__year=current_year)
<Question: What's up?> # 如果ID不存在,报错
>>> Question.objects.get(id=2)
Traceback (most recent call last):
...
DoesNotExist: Question matching query does not exist. # 由主键查找是最常见的情况,因此Django提供了一种对主键精确查找的快捷方式。下面的内容与问题.objects.get(id=1)相同。
>>> Question.objects.get(pk=1)
<Question: What's up?> # 查看定义的方法是否可用
>>> q = Question.objects.get(pk=1)
>>> q.was_published_recently()
True # 显示所有相关对象集
>>> q.choice_set.all()
[] # 用create创建新对象.
>>> q.choice_set.create(choice_text='Not much', votes=0)
<Choice: Not much>
>>> q.choice_set.create(choice_text='The sky', votes=0)
<Choice: The sky>
>>> c = q.choice_set.create(choice_text='Just hacking again', votes=0) # 通过API访问关联的对象
>>> c.question
<Question: What's up?> # 反之也成立
>>> q.choice_set.all()
[<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]
>>> q.choice_set.count()
3 # 选择查看对象
>>> Choice.objects.filter(question__pub_date__year=current_year)
[<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>] # 删除对象
>>> c = q.choice_set.filter(choice_text__startswith='Just hacking')
>>> c.delete()
												

2 第一个Django应用 第1部分(数据库与模型)的更多相关文章

  1. Django教程:[33]从数据库生成模型

    在使用django做网站的时候,有时候我们的数据库来自一个已有的数据库,如何整合这个数据库呢? django提供了方便的方法来整合已有数据库,下面我们看看具体的方法: 1.先来设置数据库:在网站文件夹 ...

  2. django “如何”系列8:如何为模型提供初始化数据

    当你第一次配置一个app的时候,有时候使用硬编码的数据去预填充你的数据库是非常有用的.这里有几个你可以让django自动创建这些数据的方法:你可以提供固定格式的初始化数据或者提供通过SQL初始化数据. ...

  3. 第一个django

    4.创建第一个Django工程 Django环境算是配置完成了,你可以到命令提示符下创建第一个Django应用,进入某个目录,执行django-admin.py startproject myproj ...

  4. 搭建你的第一个Django应用程序

    首先你要确保你机器上面安装了python:Python开发_python的安装 python的相关学习资料:http://www.cnblogs.com/hongten/tag/python/ 其次, ...

  5. Python开发入门与实战2-第一个Django项目

    2.第一个Django项目 上一章节我们完成了python,django和数据库等运行环境的安装,现在我们来创建第一个django project吧,迈出使用django开发应用的第一步. 2.1.创 ...

  6. 编写你的第一个 Django 程序 第1部分

    原地址:http://django-chinese-docs.readthedocs.org/en/latest/intro/tutorial01.html 让我们通过例子来学习. 在本教程中,我们将 ...

  7. Django教程:第一个Django应用程序(4)

    Django教程:第一个Django应用程序(4) 2013-10-09 磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 37391319 #博客: ...

  8. Django教程:第一个Django应用程序(3)

    Django教程:第一个Django应用程序(3) 2013-10-08 磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 37391319 #博客: ...

  9. 第一个Django项目及部署到Sina App Engine

    Sina App Engine简称SAE,是个比较好的网站托管平台,目前说是全面免费,其实就是每个人分配很小的资源配额,在一定的使用范围内不用消耗云豆(SAE计费方式),对于个人学习和研究足够了,同类 ...

  10. 如何创建一个Django项目

    Django 软件框架 软件框架是由其中的各个模块组成,每个模块负责特定的功能,模块与模块之间相互协作来完成软件开发. MVC简介 MVC框架的核心思想是:解耦,让不同的代码块之间降低耦合,增强代码的 ...

随机推荐

  1. How Many Triangles (极角排序 + 尺取法)

    题意:二维平面与有很多个点,然后求构成锐角三角形的个数. 思路:对于每一个三角形我们知道存在至少2个锐角,只要有一个钝角就不行了,所以我们的想法就是枚举所有夹角的状态,然后得知情况,确定用总个数减去- ...

  2. Flask最强攻略 - 跟DragonFire学Flask - 第十四篇 Flask-SQLAlchemy

    前不久刚刚认识过了SQLAlchemy,点击这里复习一下 当 Flask 与 SQLAlchemy 发生火花会怎么样呢? Flask-SQLAlchemy就这么诞生了 首先要先安装一下Flask-SQ ...

  3. oracel数据库主键自增

    -- Create sequence create sequence FILE_ID_SEQ   主键名(自增列) minvalue 1         起始 maxvalue 99999     最 ...

  4. GO语言常量和变量

    标识符与关键字 标识符 人为定义有特殊意义的词,Go语言中标识符由字母数字和_(下划线)组成,并且只能以字母和_开头. 关键字 关键字是指编程语言中预先定义好的具有特殊含义的标识符. GO语言中有25 ...

  5. jquery单击事件的写法

    方式一: //点击要素,修改URL $(document).on('click',"#modUrlYs" ,function (){ //$("#modUrlYs&quo ...

  6. MySQL插入更新_ON DUPLICATE KEY UPDATE

    前提:操作的表具有主键或唯一索引 INSERT INTO:表中不存在对应的记录,则插入:若存在对应的记录,则报错: INSERT INTO IGNORE:表中不存在对应的记录,则插入:若存在对应的记录 ...

  7. LATCH_VARIANT = Magna compile

    after: LATCH_VARIANT = Magna in m_project_cfg.mak of PG_.. 1. first error: SED   tmp__.dep/bin/sh: / ...

  8. 0.3:Before We Start

    文章著作权归作者所有.转载请联系作者,并在文中注明出处,给出原文链接. 本系列原更新于作者的github博客,这里给出链接. 需要做的准备 首先肯定是需要安装Unity,我这里选择的版本是Unity ...

  9. Android组件系列----Intent详解

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  10. 【Python游戏编程03--pygame事件与设备轮询】

    一.pygame事件 1.pygame事件可以处理游戏中的各种事情,完整的事件列表如下: QUIT,ACTIVEEVENT,KEYDOWN,KEYDOWN,MOUSEMOTION,MOUSEBUTTO ...