目标应用:

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

查看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. log4j:WARN No appenders could be found for logger 解决方案

    我们在使用Log4j的时候,总是出现: log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging.Log ...

  2. day05 Python中的set集合

    集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 1.去重,把一个列表变成集合,就自动去重了. 2.关 ...

  3. Java面试题整理---JVM篇

    1.JVM运行时内存区域划分?   2.内存溢出OOM和堆栈溢出SOE的案例.原因.排查及解决?   3.常用的JVM性能监控工具?   4.JVM参数设置?   5.类加载过程?   6.JVM内存 ...

  4. Html Title 标签

    Html Title 标签 Title 是 HTML Head 内部标签 <html> <head> <!-- Title标签:HTML的标头标题 --> < ...

  5. Bitmap的秘密

    作者: 周海鹏  来源: infoQ  发布时间: 2015-02-13 11:26  阅读: 4999 次  推荐: 10   原文链接   [收藏] 之前已经参加过几次QCon峰会,不过今年QCo ...

  6. gitlab 迁移

    http://www.cnblogs.com/crysmile/p/9505527.html

  7. Android活动和碎片的生命周期及addToBackStack()方法

    开始学了Android活动的生命周期后又到了碎片的生命周期,就开始有点乱了.又看了一些总结的文章有一个挺详细的:https://blog.csdn.net/lecepin/article/detail ...

  8. 关于vim的折叠

    参考: http://www.cnblogs.com/fakis/archive/2011/04/14/2016213.html 和 这篇文章: https://blog.csdn.net/benda ...

  9. 伪分布式安装core-site.xml和hdfs-site.xml配置文件

    hadoop的伪分布式安装流程如下所示: 其中core-site.xml和hdfs-site.xml是两个很重要的配置文件. core-site.xml <configuration> & ...

  10. 洛谷 P1273 【有线电视网】

    题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树的内部节点. 从转播站到转播站以及从 ...