总结一下这几天学习django的心得

http://www.tuicool.com/articles/jMVB3e

时间 2014-01-12 11:40:11  CSDN博客

Python 是个门十分简洁 好用的编程语言,我之前熟悉的是Java 但是用了Python之后 ,发现python的语法还有结构十分清晰,比如强制的缩进,空行,给人的感觉是,写出来的代码很整洁,非常干净漂亮。外加上Python 的各种框架十分之多,从webpy ,jdango  .使用python 开发十分快捷。鉴于 性能上,jdango 还是比较重的。可以支撑的比其他的框架要好的很多。另外,python 的开源的库十分居多,我们可以使用 python 的pip  sudo pip install XXX 来方便安装,汗,我之前还一直用的是 python setup.py install .都是一个一个下载下来;哎。。。。。

说道python  。如果有对python 语法不熟悉的同学,直接在网上看 python基础教程 或者其他,有的同学喜欢买书,我也买了几本,但是一直都没有看,东西都是从网上学来的,虽说有点杂,但是经常总结总结应该说还是不错的。

好了,直接开始一点Django 的学习吧。 首先推荐的是 pythontip.com 这里面有Django 和python 学习教程,这些东西自学完成 后 估计python 和jdango 都入了门了,然后在

进阶高级的。那就是后话了。

PS 我用的是mac 下得PyCharm 开发python 爽歪歪

1. 如何创建 Django  工程

一个工程里面包裹好多Apps

首先你进入一个文件夹中 (你已经安装了jdango 你可以用setup.py 也可以用我前面说的pip) 然后执行 django-admin.py startproject mysite 这样会在目录下建立一个 mysite

的文件夹,这时候包含了4个文件。

__init__.py
manage.py
settings.py
urls.py

文件如下:

  • __init__.py  :让 Python 把该目录当成一个开发包 (即一组模块)所需的文件。 这是一个空文件,一般你不需要修改它。

  • manage.py  :一种命令行工具,允许你以多种方式与该 Django 项目进行交互。 键入 python   manage.py   help ,看一下它能做什么。 你应当不需要编辑这个文件;在这个目录下生成它纯是为了方便。

    5
  • settings.py  :该 Django 项目的设置或配置。 查看并理解这个文件中可用的设置类型及其默认值。

  • urls.py :Django项目的URL设置。 可视其为你的django网站的目录。 目前,它是空的。

尽管这些的文件很小,但这些文件已经构成了一个可运行的Django应用。

2 然后进行 python manage.py runserver

 
Validating models...
0 errors found. Django version 1.0, using settings 'mysite.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

这将会在端口8000启动一个本地服务器, 并且只能从你的这台电脑连接和访问。 既然服务器已经运行起来了,现在用网页浏览器访问  http://127.0.0.1:8000/  。 你应该可以看到一个令人赏心悦目的淡蓝色Django欢迎页面。 它开始工作了。

更改 端接口

更改这个 Development Server 的主机地址或端口

默认情况下,  runserver  命令在 8000 端口启动开发服务器,且仅监听本地连接。 要想要更改服务器端口的话,可将端口作为命令行参数传入:

python manage.py runserver 8080

通过指定一个 IP 地址,你可以告诉服务器–允许非本地连接访问。 如果你想和其他开发人员共享同一开发站点的话,该功能特别有用。 `` 0.0.0.0`` 这个 IP 地址,告诉服务器去侦听任意的网络接口。

4
python manage.py runserver 0.0.0.0:8000

完成这些设置后,你本地网络中的其它计算机就可以在浏览器中访问你的 IP 地址了。比如: http://192.168.1.103:8000/  . (注意,你将需要校阅一下你的网络配置来决定你在本地网络中的IP 地址) Unix用户可以在命令提示符中输入ifconfig来获取以上信息。 使用Windows的用户,请尝试使用 ipconfig 命令。

3 接下来,你可以去使用 5中数据库,可能常用的 有mysql 和sqlite 、

设置数据库所需适配器`` postgresql``PostgreSQL psycopg  1.x版, http://www.djangoproject.com/r/python-pgsql/1/ 。

postgresql_psycopg2 PostgreSQL psycopg  2.x版, http://www.djangoproject.com/r/python-pgsql/ 。

mysql MySQL MySQLdb  ,  http://www.djangoproject.com/r/python-mysql/ .

sqlite3 SQLite如果使用Python 2.5+则不需要适配器。

否则就使用  pysqlite  , http://www.djangoproject.com/r/python-sqlite/ 。

oracle Oracle cx_Oracle  ,  http://www.djangoproject.com/r/python-oracle/ .

13

4 开始一个新的Apps

在`` mysite`` 项目文件下输入下面的命令来创建`` books`` app:

python manage.py startapp books

这个命令并没有输出什么,它只在  mysite  的目录里创建了一个  books  目录。 让我们来看看这个目录的内容:

books/
__init__.py
models.py
tests.py
views.py

这个目录包含了这个app的模型和视图。

5 建立数据库 和models

第一步是用Python代码来描述它们。 打开由`` startapp`` 命令创建的 models.py  并输入下面的内容:

1
from django.db import models

class Publisher(models.Model):
name = models.CharField(max_length=30)
address = models.CharField(max_length=50)
city = models.CharField(max_length=60)
state_province = models.CharField(max_length=30)
country = models.CharField(max_length=50)
website = models.URLField() class Author(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
email = models.EmailField() class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField()

让我们来快速讲解一下这些代码的含义。 首先要注意的事是每个数据模型都是 django.db.models.Model  的子类。它的父类 Model 包含了所有必要的和数据库交互的方法,并提供了一个简洁漂亮的定义数据库字段的语法。 信不信由你,这些就是我们需要编写的通过Django存取基本数据的所有代码。

12

每个模型相当于单个数据库表,每个属性也是这个表中的一个字段。 属性名就是字段名,它的类型(例如 CharField  )相当于数据库的字段类型 (例如  varchar  )。例如,  Publisher  模块等同于下面这张表(用PostgreSQL的  CREATE   TABLE  语法描述):

CREATE TABLE "books_publisher" (
"id" serial NOT NULL PRIMARY KEY,
"name" varchar(30) NOT NULL,
"address" varchar(50) NOT NULL,
"city" varchar(60) NOT NULL,
"state_province" varchar(30) NOT NULL,
"country" varchar(50) NOT NULL,
"website" varchar(200) NOT NULL
);

事实上,正如过一会儿我们所要展示的,Django 可以自动生成这些  CREATE   TABLE  语句。

“每个数据库表对应一个类”这条规则的例外情况是多对多关系。 在我们的范例模型中,  Book  有一个  多对多字段 叫做  authors  。 该字段表明一本书籍有一个或多个作者,但  Book  数据库表却并没有  authors  字段。 相反,Django创建了一个额外的表(多对多连接表)来处理书籍和作者之间的映射关系。

8

请查看附录 B 了解所有的字段类型和模型语法选项。

6

最后需要注意的是,我们并没有显式地为这些模型定义任何主键。 除非你单独指明,否则Django会自动为每个模型生成一个自增长的整数主键字段每个Django模型都要求有单独的主键。 id

2

模型安装

完成这些代码之后,现在让我们来在数据库中创建这些表。 要完成该项工作,第一步是在 Django 项目中  激活  这些模型。 将  books  app 添加到配置文件的已安装应用列表中即可完成此步骤。

再次编辑  settings.py  文件, 找到  INSTALLED_APPS  设置。  INSTALLED_APPS  告诉 Django 项目哪些 app 处于激活状态。 缺省情况下如下所示:

3
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
)

把这四个设置前面加#临时注释起来。 (这四个app是经常使用到的,我们将在后续章节里讨论如何使用它们)。同时,注释掉MIDDLEWARE_CLASSES的默认设置条目,因为这些条目是依赖于刚才我们刚在INSTALLED_APPS注释掉的apps。 然后,添加`` ‘mysite.books’`` 到`` INSTALLED_APPS`` 的末尾,此时设置的内容看起来应该是这样的:

MIDDLEWARE_CLASSES = (
# 'django.middleware.common.CommonMiddleware',
# 'django.contrib.sessions.middleware.SessionMiddleware',
# 'django.contrib.auth.middleware.AuthenticationMiddleware',
) INSTALLED_APPS = (
# 'django.contrib.auth',
# 'django.contrib.contenttypes',
# 'django.contrib.sessions',
# 'django.contrib.sites',
'mysite.books',
)

(就像我们在上一章设置TEMPLATE_DIRS所提到的逗号,同样在INSTALLED_APPS的末尾也需添加一个逗号,因为这是个单元素的元组。 另外,本书的作者喜欢在  每一个  tuple元素后面加一个逗号,不管它是不是 只有一个元素。 这是为了避免忘了加逗号,而且也没什么坏处。)

1

'mysite.books' 指示我们正在编写的 books  app。  INSTALLED_APPS  中的每个app都使用 Python的路径描述,包的路径,用小数点“.”间隔。

现在我们可以创建数据库表了。 首先,用下面的命令验证模型的有效性:

python manage.py validate

validate  命令检查你的模型的语法和逻辑是否正确。 如果一切正常,你会看到  0   errors   found  消息。如果出错,请检查你输入的模型代码。 错误输出会给出非常有用的错误信息来帮助你修正你的模型。

一旦你觉得你的模型可能有问题,运行  python   manage.py   validate  。 它可以帮助你捕获一些常见的模型定义错误。

模型确认没问题了,运行下面的命令来生成  CREATE   TABLE  语句(如果你使用的是Unix,那么可以启用语法高亮):

python manage.py sqlall books

在这个命令行中,  books  是app的名称。 和你运行  manage.py   startapp  中的一样。执行之后,输出如下:

BEGIN;
CREATE TABLE "books_publisher" (
"id" serial NOT NULL PRIMARY KEY,
"name" varchar(30) NOT NULL,
"address" varchar(50) NOT NULL,
"city" varchar(60) NOT NULL,
"state_province" varchar(30) NOT NULL,
"country" varchar(50) NOT NULL,
"website" varchar(200) NOT NULL
)
;
CREATE TABLE "books_author" (
"id" serial NOT NULL PRIMARY KEY,
"first_name" varchar(30) NOT NULL,
"last_name" varchar(40) NOT NULL,
"email" varchar(75) NOT NULL
)
;
CREATE TABLE "books_book" (
"id" serial NOT NULL PRIMARY KEY,
"title" varchar(100) NOT NULL,
"publisher_id" integer NOT NULL REFERENCES "books_publisher" ("id") DEFERRABLE INITIALLY DEFERRED,
"publication_date" date NOT NULL
)
;
CREATE TABLE "books_book_authors" (
"id" serial NOT NULL PRIMARY KEY,
"book_id" integer NOT NULL REFERENCES "books_book" ("id") DEFERRABLE INITIALLY DEFERRED,
"author_id" integer NOT NULL REFERENCES "books_author" ("id") DEFERRABLE INITIALLY DEFERRED,
UNIQUE ("book_id", "author_id")
)
;
CREATE INDEX "books_book_publisher_id" ON "books_book" ("publisher_id");
COMMIT;

注意:

  • 自动生成的表名是app名称(  books  )和模型的小写名称 (  publisher  ,  book ,  author  )的组合。你可以参考附录B重写这个规则。

  • 我们前面已经提到,Django为每个表格自动添加加了一个  id  主键, 你可以重新设置它。

  • 按约定,Django添加  "_id"  后缀到外键字段名。 你猜对了,这个同样是可以自定义的。

    4
  • 外键是用  REFERENCES  语句明确定义的。

  • 这些  CREATE   TABLE  语句会根据你的数据库而作调整,这样象数据库特定的一些字段例如:(MySQL), auto_increment (PostgreSQL), serial(SQLite),都会自动生成。 integer   primary   key  同样的,字段名称也是自动处理(例如单引号还好是双引号)。 例子中的输出是基于PostgreSQL语法的。

    6

sqlall  命令并没有在数据库中真正创建数据表,只是把SQL语句段打印出来,这样你可以看到Django究竟会做些什么。 如果你想这么做的话,你可以把那些SQL语句复制到你的数据库客户端执行,或者通过Unix管道直接进行操作(例如,`` python manager.py sqlall books | psql mydb`` )。不过,Django提供了一种更为简易的提交SQL语句至数据库的方法: `` syncdb`` 命令

python manage.py syncdb

执行这个命令后,将看到类似以下的内容:

Creating table books_publisher
Creating table books_author
Creating table books_book
Installing index for books.Book model

syncdb  命令是同步你的模型到数据库的一个简单方法。 它会根据  INSTALLED_APPS  里设置的app来检查数据库, 如果表不存在,它就会创建它。 需要注意的是,  syncdb  并  不能 将模型的修改或删除同步到数据库;如果你修改或删除了一个模型,并想把它提交到数据库, syncdb 并不会做出任何处理。 (更多内容请查看本章最后的“修改数据库的架构”一段。)

8

如果你再次运行  python   manage.py   syncdb  ,什么也没发生,因为你没有添加新的模型或者 添加新的app。因此,运行 python   manage.py   syncdb 总是安全的,因为它不会重复执行SQL语句。

如果你有兴趣,花点时间用你的SQL客户端登录进数据库服务器看看刚才Django创建的数据表。 你可以手动启动命令行客户端(例如,执行PostgreSQL的`` psql`` 命令),也可以执行 `` python manage.py dbshell`` ,这个命令将依据`` DATABASE_SERVER`` 的里设置自动检测使用哪种命令行客户端。 常言说,后来者居上。

6  你应该学会使用Context 和模板(待续)

说明: 本文好多参考 pythontip.com 的Django教程。 在此谢过.

总结一下这几天学习django的心得的更多相关文章

  1. 学习django就看这本书了!django book 2.0中文版

    所属网站分类: 资源下载 > python电子书 作者:熊猫烧香 链接:http://www.pythonheidong.com/blog/article/29/ 来源:python黑洞网 dj ...

  2. 学习Django,http协议,

    学习Django http协议 规则 ''' http协议:超文本传输协议 ①基于TCP/IP协议基础上的应用层协议,底层实现仍为socket ②基于请求-响应模式:通讯一定是从客户端开始,服务器端接 ...

  3. Python学习---django模板语法180122

    django模板语法[Template] 模版的组成:  HTML代码+逻辑控制代码  <h1> {{ user_name }} </h1> 逻辑控制代码的组成: 1.变量: ...

  4. 第一章 Django之学习Django所需知识(3)

    所需编程知识 本书读者需要理解基本的面向过程和面向对象编程:流程控制(if, while 和 for),数据结构(列表,哈希表/字典),变量,类和对象. Web 开发经验,正如你所想的,也是非常有帮助 ...

  5. 小白学习django第一站-环境配置

    Django简单来说就是用Python开发的一个免费开源的Web框架 使用Django,使你能够以最小的代价构建和维护高质量的Web应用. 开搞!!! 工具准备: linux(ubuntu) + py ...

  6. 什么人适合学习Django?

    什么人适合学习Django? 我觉得如果你能满足以下2个条件,你就可以果断地选择Django了. 你喜欢Python, 你对Web开发有热情. 学习Python和Django并不难,最重要的是你是否对 ...

  7. 开始学习Django,配置静态登录页面

    开始学习Django,配置静态登录页面 准备阶段 众所周知,Django是一个重量级的设备齐全的web开发框架.在学习Django前我们需要具备如下的知识点: python基础编程 并发 网络编程 H ...

  8. [在学习Django框架之前所需要了解的知识点]

    [在学习Django框架之前所需要了解的知识点] Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现 ...

  9. 从实例学习 Go 语言、"并发内容" 学习笔记及心得体会、Go指南

    第一轮学习 golang "并发内容" 学习笔记,Go指南练习题目解析.使用学习资料 <Go-zh/tour tour>.记录我认为会比较容易忘记的知识点,进行补充,整 ...

随机推荐

  1. 使yum保留下载的rpm包

    [root@14LN yum]# egrep 'cachedir|keepcache' /etc/yum.conf #cachedir=/var/cache/yum/$basearch/$releas ...

  2. 移除IIS默认的响应头

    在IIS+ASP.NET的运行环境,默认情况下会输出以下的响应头(Response Headers): 那如何移除这些响应头呢?下面我们来一个一个移除. 1. 移除Server 借助IIS URL R ...

  3. Java Hour2

    有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. 本文作者Java 现经验约为1 Hour,请各位不吝赐教. Hour2 检测字 ...

  4. Struts表单格局;theme三个属性值:simple,xhtml,css_xhtml

    转自:http://www.educity.cn/wenda/7156.html 解决Struts2 Form表单自己布局之前先看看 theme 属性, theme属性提供 三个属性值:simple, ...

  5. 基于superagent 与 cheerio 的node简单爬虫

    最近重新玩起了node,便总结下基本的东西,在本文中通过node的superagent与cheerio来抓取分析网页的数据. 目的  superagent 抓取网页 cheerio 分析网页 准备 N ...

  6. UVALive 6887 Book Club 最大流解最大匹配

    题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show ...

  7. sql server系统表详细说明

    sysaltfiles  主数据库 保存数据库的文件 syscharsets  主数据库字符集与排序顺序 sysconfigures 主数据库 配置选项 syscurconfigs 主数据库当前配置选 ...

  8. struts乱码问题

    我觉得很有必要记录一下,在我搜便了网上乱码问题的解决方案无果之后几乎绝望. 一定要在提交的form 加上 methd =  post

  9. 2016.6.17 kali Linux 隧道工具

    隧道工具的基本概念: 1.在计算机网络中,隧道工具是指使用一种网络协议去封装另一种网络协议的技术. 2.通常用来数据伪装或者穿越防火墙,在入侵目标系统后,可用来提升权限和权限维持. Kali中的隧道工 ...

  10. DevExpress DXperience 的ASPxFilterControl 不显示 Like 菜单的方法

    当使用Linq 作为数据源时,如果使用 ASPxFilterControl 的 Like 菜单筛选数据,就会出现以下错误 LINQ to Entities does not recognize the ...