django (三) 第一个django app 创建model

经过上一章,我们已经创建好一个django app了,接下来,我们开始完善它。

首先,我们先了解些基本概念。

Django中创建的每个应用程序都是由Python的包组成,遵循某些约定。Django配有一个实用程序,自动生成一个应用程序的基本目录结构,所以您可以专注于编写代码,而不是创建目录。

那么项目和应用程序到底有什么区别呢?

一个app是一个web应用:比如一个博客系统,一个简单的投票系统。而一个项目是一个集合的配置和应用程序特定的Web站点。一个项目可以包含多个应用程序。应用程序可以存在于在多个项目。

应用程序可以放置在任何Python路径下。在本文中,我们将应用与manage.py文件放在同一个目录下,以便它可以作为一个顶级模块,而不是为mysite的子模块。

所以首先,我们进入到manage.py的同级目录下,也就是C:\mysite,输入下面的命令:

manage.py startapp polls

polls的目录结构如下:

polls/
    __init__.py
    models.py
    tests.py
    views.py

写数据库Web应用程序的第一步就是定义模型,从本质上讲就是用一些额外的元数据,定义数据库布局。模型需要对必要字段和数据行为进行定义。

在我们的程序中,我们需要建立两个模型:Poll 和 Choice,Poll包含提问和提问的日期,Choice包含投票的选项和票数的统计,每一个Choice都与一个Poll相关联。

下面修改polls/models.py:

# -*- coding: utf-8 -*-
from django.db import models

class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField(‘date published‘)
class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

这里的代码很直观,每一个model都代表了django.db.models.Model的子类,每一个model都有一些变量,用来定义数据的类型与范围。

每一个变量都是一个字段的实例,CharField表示字符串字段,DateTimeField表示日期字段,每个字段实例(如question或pub_date)在数据库中代表一列。你可以在第一个参数位置字段输入一个字符串,告诉人们这个变量的含义,比如‘date published‘。有些变量你需要给他设置一些初始参数。比如IntegerField。表与表之间会有一些外键,可以用ForeignKey去设置。Django里的外键有many-to-ones, many-to-manys and one-to-ones.

这些代码将告诉Django做以下事情:

  • 为这个应用创建数据结构(为这些表创建声明) .
  • 为Poll和Choice等对象创建数据接口。

做这些之前,我们首先得告诉程序,Poll应用已经建好了。修改setting.py里的INSTALLED_APPS,向里面添加polls如下:

INSTALLED_APPS = (
    ‘django.contrib.auth‘,
    ‘django.contrib.contenttypes‘,
    ‘django.contrib.sessions‘,
    ‘django.contrib.sites‘,
    ‘django.contrib.messages‘,
    ‘django.contrib.staticfiles‘,
    ‘polls‘
    # Uncomment the next line to enable the admin:
    # ‘django.contrib.admin‘,
    # Uncomment the next line to enable admin documentation:
    # ‘django.contrib.admindocs‘,
)

现在,程序知道polls应用已经安好,下面来执行另外一个命令:

manage.py sql polls

出现如下内容:

BEGIN;
CREATE TABLE "polls_poll" (
    "id" integer NOT NULL PRIMARY KEY,
    "question" varchar(200) NOT NULL,
    "pub_date" datetime NOT NULL
)
;
CREATE TABLE "polls_choice" (
    "id" integer NOT NULL PRIMARY KEY,
    "poll_id" integer NOT NULL REFERENCES "polls_poll" ("id"),
    "choice_text" varchar(200) NOT NULL,
    "votes" integer NOT NULL
)
;

COMMIT;

让我们来解释一下它:

这里的polls_poll 和 polls_choice都是系统根据model里的变量自动生成的,由于我们没有设置主键,所以系统将主键设置为id.

sql命令并没有真的去数据库中执行SQL语句——它只是打印到屏幕上,这样你可以看到SQL Django认为是必需的。

下面介绍几个命令:

manage.py validate

用来检查模型是否正确。

manage.py sqlcustom polls

输出任何自定义SQL语句(如表的修改或为应用程序定义的约束)。

manage.py sqlclear polls

为这个应用程序输出必要的DROP TABLE语句,根据哪些表已经存在于您的数据库(如果有的话)。

manage.py sqlindexes polls

为这个应用程序输出CREATE INDEX语句。

manage.py sqlall polls

上述所有命令的集合。

现在,可以为这些模型创建表了,执行:

manage.py syncdb

注意,这个命令只会为没有创建过表app去创建新表。

时间: 2024-08-04 09:45:34

django (三) 第一个django app 创建model的相关文章

django (五) 第一个django app 创建template,修改admin外观

上一章,我们完成了admin的基本功能,但是,它的外观实在是太丑了,那么接下来,我们就尝试去改变它吧~ 要想改变它就要使用Django的模板系统.由于admin是Django自带的app,所以他用的是Django自带的模板系统. 首先你需要在项目中创建一个模板文件夹,你可以把它放在文件中的任何位置,这里假设路径是mysite/templates 注意:这里的mysite是最外面的文件夹.修改settings.py: TEMPLATE_DIRS = ( r'C:\mysite\templates'

【2】按照Django官网,创建一个web app 创建app/创建相应的数据库表

1. Creating app $ python manage.py startapp polls That'll create a directory polls, which is laid out like this: polls/ __init__.py admin.py migrations/ __init__.py models.py tests.py views.py 1.1 Edit polls/models.py: from django.db import models cl

django (四) 第一个django app 自动生成admin site

生成管理网站让你的员工或客户添加.更改和删除内容是非常繁琐的工作.出于这个原因,Django完全自动化管理接口模型的创建.Django明确的将“内容发布者”和“公共”网站进行分离.网站管理人员使用该系统添加新闻,事件,体育成绩,等等...显示内容在公共网站.Django为网站管理员创建一个统一的界面来编辑内容. 所以admin并不是给网页浏览者使用的,而是给管理者使用的. 下面,我们将admin应用添加进我们的项目.修改setting.py如下: INSTALLED_APPS = ( 'djan

django (二) 第一个django app

第一个django app 我们来做一个投票网站. 他由两部分组成: 一个公共界面让用户去投票 一个管理界面,对投票增删改. 首先,你得创建一个新的项目,只需一行代码,django将自动为你完成这项任务. cd切换到你想存储你项目的路径下如C:\,输入: django-admin.py startproject mysite 这时,你的C:\下将多了一个文件夹mysite,打开后你会看到: mysite/ manage.py mysite/ __init__.py settings.py url

django (七) 第一个django app 创建表单

首先,在polls/detail.html里添加<form>: <h1>{{ poll.question }}</h1> {% if error_message %} <p><strong>{{ error_message }}</strong></p> {% endif %} <form action="{% url 'polls:vote' poll.id %}" method="p

django (六) 第一个django app 创建views

在Django,网页和其他内容通过views来进行交互.每个视图都通过一个简单的Python函数(或方法)来展示.Django将通过检查请求的URL来选择一个视图(更精确地说是域名后面的URL).从URL到View的过程是通过URLconfs来控制的. 接下来让我们写一个view.首先打开polls/views.py,添加如下代码: # -*- coding: utf-8 -*- from django.http import HttpResponse def index(request): r

django (八) 第一个django app 添加样式表和图片

在Django中,需要把Css和图片等文件放在static files下. 然后依次创建下列文件下: polls/static/polls/style.css 然后修改style.css如下: li a { color: green; } 下一步,在polls/index.html里添加下面代码: {% load staticfiles %} <link rel="stylesheet" type="text/css" href="{% static

django学习2-第一个Django页面:Hello World

在url.py中写入URL 一定要导入视图: from.mysite import hello url(r'^hello/$',hello), #r表示不转义特殊字符. 2.定义一个views.py 写入下面的语句 from django.http import HttpResponse def hello(request):    return HttpResponse("Hello world") 3.这样输入python manage.py runserver 访问127.0.0

Django学习笔记(二)App创建之Model

通过实例学习, 构建一个投票(Polls)Application, 目标结果包含两个site, 一个site用来显示投票问题以及投票结果(即将展示出来的网站), 另一个site用来管理Poll实例的增删改查(即后台内容管理CMS). 1.   创建工程 django-admin.py startproject mysite 在当前目录下, 会创建一个mysite的工程目录. 那么我们的代码放在哪里比较好呢? 可能会放到OS自带的server根目录(document root)下, 比如/var/