django自学

来源:互联网 发布:淘宝查排名软件哪个好 编辑:程序博客网 时间:2024/05/21 11:36

**外层的mysite/根目录仅仅是项目的一个容器。它的命名对Django无关紧要;你可以把它重新命名为任何你喜欢的名字。
manage.py:一个命令行工具,可以使你用多种方式对Django项目进行交互。 你可以在django-admin和manage.py中读到关于manage.py的所有细节。
内层的mysite/目录是你的项目的真正的Python包。它是你导入任何东西时将需要使用的Python包的名字(例如 mysite.urls)。
mysite/init.py:一个空文件,它告诉Python这个目录应该被看做一个Python包。 (如果你是一个Python初学者,关于包的更多内容请阅读Python的官方文档)。
mysite/settings.py:该Django 项目的设置/配置。Django 设置 将告诉你这些设置如何工作。
mysite/urls.py:该Django项目的URL声明;你的Django站点的“目录”。 你可以在URL 分配器 中阅读到关于URL的更多内容。
mysite/wsgi.py:用于你的项目的与WSGI兼容的Web服务器入口。 更多细节请参见如何利用WSGI进行部署。**


**默认情况下,INSTALLED_APPS包含下面的应用,它们都是Django 与生俱来的:

django.contrib.admin —— 管理站点。你将在本教程的第2部分使用到它。
django.contrib.auth —— 认证系统。
django.contrib.contenttypes —— 用于内容类型的框架。
django.contrib.sessions —— 会话框架。
django.contrib.messages —— 消息框架。
django.contrib.staticfiles —— 管理静态文件的框架。**


**修改你的模型(在models.py中)。
运行python manage.py makemigrations 来为这些修改创建迁移文件
运行python manage.py migrate 以运用这些改变到数据库中。**


绕开 manage.py

如果你不想使用manage.py,也没问题。只要设置DJANGO_SETTINGS_MODULE 环境变量为 mysite.settings,启动一个普通的Python shell,然后建立Django:

import django
django.setup()
如果以上命令引发了一个AttributeError,可能是你使用了一个和本教程不匹配的Django版本。 你可能需要换一个老一点的教程或者换一个新一点的Django版本。

你必须在与manage.py相同的目录下运行python,或确保你的目录在Python 的路径中,这样import mysite才可以工作。

所有这些信息,请参见django-admin 的文档。


str_ 还是 unicode?

对于Python 3来说,这很简单,只需使用str()。

对于Python 2来说,你应该定义unicode()方法并返回unicode 值。Django 模型具有一个默认的str() 方法,它会调用unicode()并将结果转换为UTF-8 字节字符串。这意味着unicode(p)将返回一个Unicode 字符串,而str(p)将返回一个字节字符串,其字符以UTF-8编码。Python 的行为则相反:对象的unicode方法调用 str方法并将结果理解为ASCII 字节字符串。这个不同点可能会产生困惑。

如果以上这些令你费解的话,那就使用Python 3吧。


from polls.models import Question, Choice

Make sure our str() addition worked.

Question.objects.all()
[

Django provides a rich database lookup API that’s entirely driven by

keyword arguments.

Question.objects.filter(id=1)
[

Get the question that was published this year.

from django.utils import timezone
current_year = timezone.now().year
Question.objects.get(pub_date__year=current_year)

Request an ID that doesn’t exist, this will raise an exception.

Question.objects.get(id=2)
Traceback (most recent call last):

DoesNotExist: Question matching query does not exist.

Lookup by a primary key is the most common case, so Django provides a

shortcut for primary-key exact lookups.

The following is identical to Question.objects.get(id=1).

Question.objects.get(pk=1)

Make sure our custom method worked.

q = Question.objects.get(pk=1)
q.was_published_recently()
True

Give the Question a couple of Choices. The create call constructs a new

Choice object, does the INSERT statement, adds the choice to the set

of available choices and returns the new Choice object. Django creates

a set to hold the “other side” of a ForeignKey relation

(e.g. a question’s choice) which can be accessed via the API.

q = Question.objects.get(pk=1)

Display any choices from the related object set – none so far.

q.choice_set.all()
[]

Create three choices.

q.choice_set.create(choice_text=’Not much’, votes=0)

q.choice_set.create(choice_text=’The sky’, votes=0)

c = q.choice_set.create(choice_text=’Just hacking again’, votes=0)

Choice objects have API access to their related Question objects.

c.question

And vice versa: Question objects get access to Choice objects.

q.choice_set.all()
[, , ]
q.choice_set.count()
3

The API automatically follows relationships as far as you need.

Use double underscores to separate relationships.

This works as many levels deep as you want; there’s no limit.

Find all Choices for any question whose pub_date is in this year

(reusing the ‘current_year’ variable we created above).

Choice.objects.filter(question__pub_date__year=current_year)
[, , ]

Let’s delete one of the choices. Use delete() for that.

c = q.choice_set.filter(choice_text__startswith=’Just hacking’)
c.delete()


外层的mysite/根目录仅仅是项目的一个容器。它的命名对Django无关紧要;你可以把它重新命名为任何你喜欢的名字。
manage.py:一个命令行工具,可以使你用多种方式对Django项目进行交互。 你可以在django-admin和manage.py中读到关于manage.py的所有细节。
内层的mysite/目录是你的项目的真正的Python包。它是你导入任何东西时将需要使用的Python包的名字(例如 mysite.urls)。
mysite/init.py:一个空文件,它告诉Python这个目录应该被看做一个Python包。 (如果你是一个Python初学者,关于包的更多内容请阅读Python的官方文档)。
mysite/settings.py:该Django 项目的设置/配置。Django 设置 将告诉你这些设置如何工作。
mysite/urls.py:该Django项目的URL声明;你的Django站点的“目录”。 你可以在URL 分配器 中阅读到关于URL的更多内容。
mysite/wsgi.py:用于你的项目的与WSGI兼容的Web服务器入口。 更多细节请参见如何利用WSGI进行部署。


Polls change list page, updated
你可以点击其中一列的头部来让列表按照这列的值来进行排序 —— 除了was_published_recently这列的头部,因为Django不支持按照随便一个方法的输出进行排序。另外注意, was_published_recently这列的头部默认是这个方法的名字(用空格取代下划线),并且这列的每一项内容都是用返回值的字符串形式表示。


现在又是一个好时机来告诉你变更列表界面提供方便的分页功能。 默认每页显示100条。 Change list pagination、search boxes、filters、date-hierarchies和column-header-ordering 都将按照你设想的那样工作。


自定义管理站点的外观¶

很明显,每个管理页面的顶部都有“Django administration”还蛮搞笑的。它仅仅起到了占位符的作用。

它可以用Django的模板系统轻松改变。 Django的管理站点是用Django自己制作出来的,它的界面代码使用的是Django自己的模板系统。

自定义项目的模板¶

在你项目的文件夹内创建一个templates目录(包含 manage.py的目录)。模板可以放在Django能访问到的文件系统任何地方。 (运行你的服务器的用户即是运行Django的用户)。然而,将模板放在你的项目目录下是一个应该遵循的非常好的约定。

打开你的配置文件(记住是mysite/settings.py)在TEMPLATES 设置中添加一个DIRS 选项:

mysite/settings.py
TEMPLATES = [
{
‘BACKEND’: ‘django.template.backends.django.DjangoTemplates’,
‘DIRS’: [os.path.join(BASE_DIR, ‘templates’)],
‘APP_DIRS’: True,
‘OPTIONS’: {
‘context_processors’: [
‘django.template.context_processors.debug’,
‘django.template.context_processors.request’,
‘django.contrib.auth.context_processors.auth’,
‘django.contrib.messages.context_processors.messages’,
],
},
},
]
DIRS 是加载Django模板时检查的一个文件系统目录列表;它是一个搜索路径。

现在,在templates下创建一个名为admin的目录,然后将admin/base_site.html从Django源码中管理站点的模板目录(django/contrib/admin/templates)拷贝到这个目录中。

0 0