1创建虚拟环境
2激活虚拟环境
3pip install Django
4用Django创建项目:
在依然处于活动的虚拟环境的情况下(ll_env包含在括号内),执行如下命令来新建一个项目
django-admin.py startproject learning_log .
5创建数据库
python manage.py migrate
查看项目
python manage.py runserver
6创建应用程序
重新打开一个终端,进入manage.py 所在目录,激活虚拟环境,再执行
python manage.py startapp learning_logs
learning_logs是文件名,创建的最重要的是models.py、admin.py和views.py
我们将使用models.py来定义我们要在应用程序中管理的数据
7定义模型
模型告诉Django如何处理应用程序中存储的数据。
class Topic(models.Model):
"""用户学习的主题"""
text = models.CharField(max_length=200)
date_added = models.DateTimeField(auto_now_add=True)
def __Str__(self):
"""返回模型的字符串表示"""
return self.text
上面的一段代码有错误,__str__(self)才是正确的,如果是__Str__()那么主题名称就显示不了。
我们创建了一个名为Topic的类,它继承了Model——Django中一个定义了模型基本功能的
类。Topic类只有两个属性:text和date_added。
属性text是一个CharField——由字符或文本组成的数据
属性date_added是一个DateTimeField——记录日期和时间的数据
8激活模型
要使用模型,必须让Django将应用程序包含到项目中。
1打开settings.py
2找到INSTALLED APPS
3添加自己建立的程序
接下来,需要让Django修改数据库,使其能够存储与模型Topic相关的信息。
python manage.py makemigrations learning_logs
命令makemigrations让Django确定该如何修改数据库使其能够存储与我们定义的新模型相
关联的数据。
下面来应用这种迁移,让Django替我们修改数据库
python manage.py migrate
在这里,Django确认为learning_logs应用迁移时一切正常
9Django管理网站
网站的管理员可使用管理网站,但普通用户不能使用。在本节中,我们将建立管理网站,并通过它
使用模型Topic来添加一些主题。
1. 创建超级用户
python manage.py createsuperuser
用户名和邮件地址可以为,随便写。密码要写两次
2.向管理网站注册模型
我们创建应用程序learning_logs时,Django在models.py所在的目录中创建了一个名为
admin.py的文件
为向管理网站注册Topic,请输入下面的代码,在admin.py 中
from learning_logs.models import Topic
admin.site.register(Topic)
如果你在浏览器中看到一条消息,指出访问的网页不可用,请确认你在终端窗口中运行
着Django服务器。如果没有,请激活虚拟环境,并执行命令python manage.py runserver。
3. 添加主题
10定义模型Entry
models.py
属性topic是一个ForeignKey实例,外键是一个数据库术语,它引用了数据库中的另一条记录
属性text,它是一个TextField实例(见)。这种字段不需要长度限制,因为我们不想限制条目的长度。属性date_added让我们能够按创建顺序呈现条目,并在每个条目旁边放置时间戳。
Meta存储用于管理模型的额外信息
迁移模型 Entry
会遇到问题
TypeError: __init__() missing 1 required positional argument: 'on_delete'
解决之后的代码
你将慢慢地对这个过程了如指掌:
修 改models.py,执行命令python manage.py makemigrations app_name,再执行命令python
manage.py migrate。
向管理网站注册 Entry
在admin.py
from learning_logs.models import Topic, Entry
admin.site.register(Entry)
11Django shell
输入一些数据后,就可通过交互式终端会话以编程方式查看这些数据了
这种交互式环境称为Django shell,是测试项目和排除其故障的理想之地.
开启python解释器:python manage.py shell
探索存储在项目数据库中的数据
from learning_logs.models import Topic
Topic.objects.all()
# 因为这之前我写的代码是__Str__,所以topic对应的没有改变,接下来是改变的
获取id和主题名称
from learning_logs.models import Topic,Entry
topic = Topic.objects.all()
for topic in topics:
print(topic.id,topic)
得到id,获取属性值
from learning_......
t = Topic.object.get(id=number)
t.属性
每次修改模型后,你都需要重启shell,这样才能看到修改的效果。要退出shell会话,可按Ctr + D;如果你使用的是Windows系统,应按Ctr + Z,再按回车键。
~~~~~~~~~~~~~~~~~~~~不是正文~~~~~~~~~~~~~~~~~~~~~~
在已经定义好的类里面,改动一些代码并不用执行python manage.py makemigrations learning_logs
改动了
改动了str里的内容。如果文本长度大于50。输出原文,如果不是,就输出一个长度。
终端:python manage.py shell
from learning_logs.models import Topic
t=Topic.objects.get(id=1)
t.entry_set.all()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
12创建网页:学习笔记主页
定义URL、编写视图和编写模板
第一阶段
定义URL
你必须定义URL模式。URL模式描述了URL是如何设计的,让Django知道如何将浏览器请求与网站URL匹配,以确定返回哪个网页。
每个URL都被映射到特定的视图——视图函数获取并处理网页所需的数据。视图函数通常调
用一个模板,后者生成浏览器能够理解的网页。为明白其中的工作原理,我们来创建学习笔记的
主页。我们将定义该主页的URL、编写其视图函数并创建一个简单的模板。
鉴于我们只是要确保“学习笔记”按要求的那样工作,我们将暂时让这个网页尽可能简单。Web应用程序能够正常运行后,设置样式可使其更有趣,但中看不中用的应用程序毫无意义。就目前而言,主页只显示标题和简单的描述。
1.映射 URL
当前,基础 URL(http://localhost:8000/)返回默认的Django网站,让我们知道正确地建立了项目。我们将修改这一点,将这个基础URL映射到“学习笔记”的主页。
urls.py
from django.conf.urls import include,url
from django.contrib import admin
# 视图函数 views.index自己编写。
2.编写视图
learning_logs中的文件views.py是你执行命令python manage.py startapp时自动生成的,当前其内容如下
from django.shortcuts import render
函数render(),它根据视图提供的数据渲染响应
def index(request):
"""学习笔记主页"""
return render(request,'learning_logs/index.html')
3编写模版
模板定义了网页的结构。模板指定了网页是什么样的,而每当网页被请求时,Django将填入
相关的数据。写html文件。
<p>Learning Log
<p>Learning Log helps you keep track of your learning, for any topic you're
learning about.</p>
标签<p></p>标识段落;标签<p>指出了段落的开头位置,而标签</p>指出了段落的结束位置。这里定义了两个段落:第一个充当标题,第二个阐述了用户可使用“学习笔记”来做什么。
~~~~~~~~~~~~~~~~~~~~~~不是正文~~~~~~~~~~~~~~~~~~~~
问题来了
现在,如果你请求这个项目的基础URL——http://localhost:8000/,将看到刚才创建的网页,
而不是默认的Django网页。
但是出现错误了
Django Deprecation Warning or ImproperlyConfigured error - Passing a 3-tuple to django.conf.urls.include() is not supportedAsk Question
这里的问题
原来的代码是
urlpatterns = [
url(r'^admin/',includ(admin.site.urls)),
url(r'', include('learning_logs.urls',namespace='learning_logs')),
]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
13创建其他网页
1模版继承
13创建其他网页
1模版继承
base.html
<a href="{% url 'learning_logs:index' %}">Learning Log
{% block content %}{% endblock content %}
这个文件的第一部分创建一个包含项目名的段落,该段落也是一个到主页的链接。
模板标签{% url 'learning_logs:index' %},生成一个url,该URL与learning_logs/urls.py中定义的名为index的URL模式匹配。
总结
1制定项目规范
2虚拟环境中安装Django,创建项目
3创建应用程序
4定义表示应用程序数据鹅模型。
5数据库,修改模型之后django迁移数据库
6创建超级用户
7输入初始数据
8定义url
9创建视图函数
10编写为网站创建网页的模版
11模版继承