Django入门的笔记

本文总阅读量

python文档入门的笔记,也就是创建一个投票应用那个,后面的文档就只看,没记了

Django学习笔记

1. 前期准备

  • 使用虚拟环境Virtualenv
    1
    2
    3
    4
    5
    6
    7
    $ pip install Virtualenv    #安装Virtualenv
    #在要运行Django的目录创建 虚拟环境
    $ virtualenv djangoproject_env #运行后在当前目录生成djangoproject_env
    $ source djangoproject_env/bin/activate #启动虚拟环境
    $ django-admin startproject testproject #创建Django工程
    $ python manage.py runserver #进行测试
    $ python manage.py startapp testapp #创建Django应用
    Django 默认的语言是英语,所以显示给我们的欢迎页面是英文的。我们在 Django 的配置文件里稍作修改,让它支持中文。用任何一个文本编辑器打开 settings.py 文件,找到如下的两行代码:
    1
    2
    3
    4
    5
    6
    7
    8
    blogproject/blogproject/settings.py

    ## 其它配置代码...

    LANGUAGE_CODE = 'en-us'
    TIME_ZONE = 'UTC'

    ## 其它配置代码...
    把 LANGUAGE_CODE 的值改为 zh-hans,TIME_ZONE 的值改为 Asia/Shanghai:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    blogproject/blogproject/settings.py

    ## 其它配置代码...

    # 把英文改为中文
    LANGUAGE_CODE = 'zh-hans'

    # 把国际时区改为中国时区
    TIME_ZONE = 'Asia/Shanghai'

    ## 其它配置代码...
    寻找一个学习文章,英文有点渣,我就找中文的,英文看不懂的就切中文看
    中文文档 原版英本文档

2.笔记(按目录分)

1.编写你的第一个Django应用,第1部分

运行django-admin startproject mysite后会生成如下文件夹或文件

1
2
3
4
5
6
7
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
wsgi.py
  • 外层的mysite/根目录仅仅是项目的一个容器。它的命名对Django无关紧要;
  • manage.py:一个命令行工具,可以使你用多种方式对Django项目进行交互。
  • 内层的mysite/目录是你的项目的真正的Python包。它是你导入任何东西时将需要使用的Python包的名字(例如 mysite.urls)。
  • mysite/init.py:一个空文件,它告诉Python这个目录应该被看做一个Python包。
  • mysite/settings.py:该Django 项目的设置/配置。
  • mysite/urls.py:该Django项目的URL声明;你的Django站点的“目录”。
  • mysite/wsgi.py:用于你的项目的与WSGI兼容的Web服务器入口。

项目 vs. 应用
项目和应用之间有什么不同? 应用是一个Web应用程序,它完成具体的事项 —— 比如一个博客系统、一个存储公共档案的数据库或者一个简单的投票应用。 项目是一个特定网站中相关配置和应用的集合。一个项目可以包含多个应用。一个应用可以运用到多个项目中去。
如上面所创建的mysite就是一个项目

运行: python manage.py startapp polls
生成如下结构:

1
2
3
4
5
6
7
8
polls/
__init__.py
admin.py
migrations/
__init__.py
models.py
tests.py
views.py

这样的结构就是我们的polls应用,这个应用可以放在任何python path里

总结:实现模型变更的步骤

  • 修改你的模型(在models.py文件中)。
  • 激活模型
    编辑mysite/settings.py文件,并修改INSTALLED_APPS设置以包含字符串’polls’
    现在Django知道要包含polls应用。 让我们运行另外一个命令:$ python manage.py makemigrations polls
  • 运行python manage.py makemigrations ,为这些修改创建迁移文件
  • 运行python manage.py migrate ,将这些改变更新到数据库中。

2.编写你的第一个Django应用,第2部分

创建一个管理员用户¶

首先,我们需要创建一个能够登录管理站点的用户。 运行如下命令:
$ python manage.py createsuperuser
键入你想要使用的用户名,然后按下回车键:
Username: admin
然后提示你输入想要使用的邮件地址:
Email address: admin@example.com
你需要输入两次密码,第二次输入是确认密码
Password:
Password (again):
Superuser created successfully.

其中,django会自动检测密码,密码跟邮箱或者用户名太像也不会通过。。。

在polls/admin.py中,代码示例如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from django.contrib import admin

from .models import Choice, Question


class ChoiceInline(admin.StackedInline): #若是使用:admin.TabularInline则选项是紧凑型
model = Choice
extra = 3 #默认3个选项,可以自己增加,但最小为3个可以填写


class QuestionAdmin(admin.ModelAdmin):
fields = ['pub_date', 'question_text'] #再同一个框
fieldsets = [ #非同一个框,且可以用classed方法来操作这个框
(None, {'fields': ['question_text']}),
('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
inlines = [ChoiceInline] #在创建Question对象的同时可以直接添加一组Choice将会更好
list_display = ('question_text', 'pub_date', 'was_published_recently') #表可以分类显示
list_filter = ['pub_date'] #右边增加一个选项栏可以来操作

admin.site.register(Question, QuestionAdmin) #注册question到QuestionAdmin

3.编写你的第一个Django应用,第3部分

  • 创建视图
    1
    2
    #polls/views.py
    from django.http import HttpResponse
def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")
1
2
3
4
5
6
7
8
9
10
11
这就是一个视图,然而我们需要将这个视图映射到URL上 —— 利用一个URLconf。
要在polls目录中创建一个URLconf,创建一个名为urls.py的文件
```python
#polls/urls.py
from django.conf.urls import url

from . import views

urlpatterns = [
url(r'^$', views.index, name='index'),
]
下一步,让主URLconf可以链接到polls.urls模块。在mysite/urls.py中插入一个include():
1
2
3
4
5
6
7
8
#mysite/urls.py
from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
url(r'^polls/', include('polls.urls')),
url(r'^admin/', include(admin.site.urls)),
]
这样处理后就能在输入对应网址时跳转到对应的视图([关于URL的更多参数][3])
  • 模板编辑
    模板应该位于 polls/templates/polls/index.html。由于app_directories 模板加载器按照上面描述的方式工作,在Django中你可以简单地用polls/index.html引用这个模板,不这样做Python会引用到别的模板。
    因为django将选择它找到的名字匹配的第一个模板文件,如果你在不同 的应用有相同名字的模板文件,Django将不能区分它们。我们需要将Django指向正确的模板,最简单的方式是使用命名空间。具体实现方式是,将这些模板文件放在以应用的名字来命名的另一个目录下

    1
    2
    3
    4
    5
    #polls/views.py
    from django.http import HttpResponse
    from django.template import RequestContext, loader

    from .models import Question
def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    template = loader.get_template('polls/index.html')
    context = RequestContext(request, {
        'latest_question_list': latest_question_list,
    })
    return HttpResponse(template.render(context))
1
2
3
4

在这个栗子中,中文版的原文已经做了如下阐述:
> 以上的代码载入polls/index.html模板,并传给它一个context。Context是一个字典,将模板变量的名字映射到Python 对象。将你的浏览器指向“/polls/”来加载这个页面,你应该看到一个列表,包含来自教程1"What's up" Question。其链接指向Question的detail页面。
然而还是遇到了这个错误提示:
TypeError: context must be a dict rather than RequestContext.
1
2
3
    https://stackoverflow.com/questions/43787700/django-1-11-typeerror-context-must-be-a-dict-rather-than-context
也说了是Django1.8+后更改的问题
但是1.11版教程是这样的:
from django.http import HttpResponse from django.template import loader from .models import Question def index(request): latest_question_list = Question.objects.order_by('-pub_date')[:5] template = loader.get_template('polls/index.html') context = { 'latest_question_list': latest_question_list, } return HttpResponse(template.render(context, request)) ``` 也就是,改为字典传入就好了,至于为什么,等学完看源代码再说了~

4.编写你的第一个Django应用,第4,5,6部分

看后觉得有点不知所以然- -,好像也没什么重地,笔记略过

之后就开始撸文档了。。。。Django的文档好多啊 :(

这是一张在网上找的图~
enter description here

查看评论