Django官方手册阅读(投票应用)

来源:互联网 发布:监理行业发展前景知乎 编辑:程序博客网 时间:2024/06/18 17:23
%Part 1
from django.conf import settings
if settings.DEBUG:    # Do something

因为django.conf.settings并不是模块而是一个对象,不能像引用对象一样。

不能在程序运行的时候更改settings对象的内容,只能在setting 文件中更改。


进入mysite目录

$ python manage.py runserver
这样就可以开始一个django建立服务端。(这是在做一个网络框架而不是网络服务器)

端口8000是默认的可以更改;

Part 2

mysql连接不上之前要在管理工具中启动mysql服务

并且还要重新添加环境变量;

北京时间是:'UTC+8'

$ python manage.py migrate

这是为了在我们使用相关数据库的时候在我们使用前,自动创建表格;这是与在setting.py中使用是一致的。

接下来要做的是创建模型:


model模型是数据的准确来源,它包含了数据的最基本框架和行为。我们的目的是为了形成一个model让它自动提取数据。

在投票app中创立两个model:question 和 choice

question包括:1.问题;2.出版的日期

choice包括:1.选择的text 2.与之相应的投票

并且:每个选择与一个问题相关联

解释:每个类都代表一个模型;且代表一个数据库表;

每个变量:python中作为一个变量,数据库中作为一列的标题(属性什么的)

foreign key是用来告诉数据库:每个选择都与一个问题相关


接下来要激活模型(创建数据库啥的):

Migrations是Django存储对你的模型的变化的一个过程(他们只是一些硬盘上的文档);

  • Change your models (in models.py).
  • Run python manage.py makemigrations to create migrations for those changes
  • Run python manage.py migrate to apply those changes to the database.
使用API
$ python manage.py shell
不直接使用'python'是因为 manage.py 设置了 DJANGO_SETTINGS_MODULE环境变量,能够在mysite/settings.py file中给出Django引用的python模块路径

一旦进入了shell中就可以使用数据库API了。

注:使用timezone.now() 而不用datetime.datetime.now()


一个问题:

当我发现我的choice类的一个属性写错了,应把pub_dat改为pub_date,我仅仅在pycharm上更改了,结果发现,migration中的数据库的属性并没有更改;出现这个问题的时候,要重新输入:


第二个问题:

Question.objects.get(某属性)如果返回值多于一个会报错

这个时候应该使用Question.objects.filter(某属性),filter会返回一个列表。


Django管理员的创建(自动创建)

1.创建超级管理员

$ python manage.py createsuperuser

2.进入网站(我觉得是)

$ python manage.py runserver

3.使得投票app能够被admin管理者更改:我们需要告诉管理员,Question对象有admin接口



网址:http://127.0.0.1:8000/polls/34/

每个view必须要做两件事的其中之一:返回HttpResponse包含了请求的内容,或者返回HTTP404;

其他的随便你。


逻辑:python难以编写页面设计->用django中template模板调用html->捷径:使用render()函数取代httpResponse->使用get_object_or_404()取代http404()[同时要使用render()进行回应]


有个问题:页面的设计在view.py中是很难编码的。

解决方法:创建Django模版,把设计从Python语言中分离出去


步骤1:创建/polls/templates目录(在/mysite/settings中可以看到调用方式)

       创建/polls/templates/polls/index.html

重写polls/views.py中的index()函数:

使用模板(template)的捷径:运用render()模板能够引用模板,填充内容,返回HttpResponse:这样可以不import loader 和 httpresponse模块了。


引起404error

使用try:except并raise404的捷径:get_object_or_404()

使用此捷径的原因:这样会将模型层耦合到视图层,而django的设计最重要的原理就是松散地耦合(完全看不懂·····)


我的pycharm对html也没有自动补全啊哭,我的是教育邮箱的付费版呀····


注意对url地址,使用命名空间进行区分。


 精简代码:

学一个词:radio button单选按钮

In short, all POST forms that are targeted at internal URLs should use the {% csrf_token %} template tag.

接着:将程序改为能处理提交的数据的程序

reverse翻译就是“反转”的意思,反解析url以直接访问其它视图方法。

问题:会产生竞争现象;

解决方法:使用F()函数;

解释:F()函数表示了一个模块的某一栏的值,它使指向某一模块的某一字段值变为可能,在不是真的把这一字段的值从数据库中挖出来进行作用,而是对这个对象进行作用

精简代码:

现在就使用越少越好的原则精简代码了。

result()和detail()的代码都是差不多的。这代表了基本网页开发的普遍情况:根据url中的参数从数据库中提取数据,加载一个模板(html页面),返回一个规范的模板。因为它们如此相像,Django提供了一个捷径:the “generic views” system.


自动生成的管理员设置

django admin是django自己控制的,它的接口用的是自己的模板

python -c "import django; print(django.__path__)"
可以知道django的文件存储在哪里。


打包程序:

原理:一个python package包含许多modules。一个application就是一个package。我们发现只需要/polls目录下的内容

1. 创建polls的父目录django-polls;

2.把polls目录转移到django-polls目录下

3. 创建.rst文件

4. 创建django-polls/LICENSE文件(引用别人文件要有版权)

5. 创建setup.py文件

6.添加MANIFEST.in文件,包含原文件夹中没包括的内容(最好写doc文件解释并包含进去)

7.最后在命令行这个新建django-polls文件夹下运行: 

python setup.py sdist

最后能得到打包程序



0 0
原创粉丝点击