Django入门的笔记
python文档入门的笔记,也就是创建一个投票应用那个,后面的文档就只看,没记了
Django学习笔记
1. 前期准备
- 使用虚拟环境VirtualenvDjango 默认的语言是英语,所以显示给我们的欢迎页面是英文的。我们在 Django 的配置文件里稍作修改,让它支持中文。用任何一个文本编辑器打开 settings.py 文件,找到如下的两行代码:
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应用把 LANGUAGE_CODE 的值改为 zh-hans,TIME_ZONE 的值改为 Asia/Shanghai:1
2
3
4
5
6
7
8blogproject/blogproject/settings.py
## 其它配置代码...
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
## 其它配置代码...寻找一个学习文章,英文有点渣,我就找中文的,英文看不懂的就切中文看1
2
3
4
5
6
7
8
9
10
11blogproject/blogproject/settings.py
## 其它配置代码...
# 把英文改为中文
LANGUAGE_CODE = 'zh-hans'
# 把国际时区改为中国时区
TIME_ZONE = 'Asia/Shanghai'
## 其它配置代码...
中文文档 原版英本文档
2.笔记(按目录分)
1.编写你的第一个Django应用,第1部分
运行django-admin startproject mysite后会生成如下文件夹或文件
1 |
|
- 外层的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 |
|
这样的结构就是我们的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 |
|
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))
```
也就是,改为字典传入就好了,至于为什么,等学完看源代码再说了~
- 快捷方式以及404跳转查看
4.编写你的第一个Django应用,第4,5,6部分
看后觉得有点不知所以然- -,好像也没什么重地,笔记略过
之后就开始撸文档了。。。。Django的文档好多啊 :(
这是一张在网上找的图~
- 本文作者:So1n
- 本文链接:http://so1n.me/2017/08/17/10-Django-learn/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!