要使用Django,首先需要建立一个虚拟工作环境。虚拟工作环境是系统的的一个位置,可以在其中安装包,并将其与其他python包隔离。
我用的版本:python3.6+windows64位操作系统
注册用户及密码,怕忘记,所以记下来了
1、用户名:we_123,密码:we12345678
【一】建立虚拟环境
(1)新建一个项目,将其命名为learning_log,我是在E盘新建了一个文件夹,并命名为learning_log,你可以做自己的选择。
(2)然后打开终端,切换到这个目录,并创建一个虚拟环境。
1、进入DOS界面
WINDOWS键+X,然后按R键,再按回车键进入DOS界面或者点击运行,输入cmd,再按回车键进入
2、切换到目录命令
C:\Users\Administrator>cd\
C:\>e:
E:\>cd\learning_log
3、创建虚拟环境命令
E:\learning_log>python -m venv ll_env
如果什么都没有出现,跳到输入,你再去文件夹看一下有没有东西生成,如果有的话,说明成功了。这种方法对之前的python版本可能不适用。如果不适用,你需要安装virtualenv包。
【二】激活虚拟环境
(1)Linux命令:source ll_env/bin/activate
(2)Windows命令:ll_env\Scripts\activate
(3)如果要停止使用虚拟环境,则可以使用命令:deactivate
【三】安装Django
创建并激活虚拟环境后,就可以安装Django了,需要有pip
注意:Django只能在虚拟环境处于活动状态时使用,怎么知道是否在活动状态,可以看一下前面有没有(ll_env),有就说明是在活动状态,放心使用。
【四】在Django中创建项目
(1)创建项目,名为learning_log,不要忘了后面的句点,前面还有个空格,这个句点是让新项目使用合适的目录结构,这样开发完成后可以轻松地将应用程序部署到服务器。
如果而忘记了这个句点,就将创建的文件和文件夹删除(ll_env除外),再重新运行这个命令。
(2)查看目录Windows为dir,linux为ls
可以看到Django创建了一个名为learning_log的目录。还创建了一个manage.py的文件,这是一个简单的管理程序,他接受命令并将其交给Django的相关部分组件去运行。
(3)查看learning_log下的东西
可以看到包含了4个文件,其中最重要的是settings.py、urls.py、wsgi.py。文件settings.py指定Django如何与你的系统交互以及如何管理项目。在开发项目的过程中,我们将修改其中的一些设置。文件urls.py告诉Django应创建那些网页来响应浏览器请求。文件wsgi.py帮助Django提供它创建的文件,这个文件名是web server gateway interface(Web服务器网关接口)的首字母缩写。
【五】创建数据库
(1)Django将大部分与项目相关的信息都存储在数据库中,因此我们需要创建一个供Django使用的数据库,命令:python manage.py migrate。
我们将修改的数据库称为迁移数据库。首次执行命令migrate时,将让Django确保数据库与项目的当前状态匹配。在使用SQLite的新项目中首次使用这个命令时,Django将创建一个数据库。
这一部分,Django指出它将创建必要的数据库表,用于存储我们将在这个项目中(Synchronize unmigrated apps,同步未迁移的应用程序)中使用的信息,再确保数据库结构与当前代码(Apply all migrations,应用所有的迁移)匹配。
(2)在查看一下目录下的东西
发现会多了一个db.sqlite3,SQLite是一种使用单个文件的数据库,是编写简单应用程序的理想选择,因为它让你不用太关注数据库管理的问题。
(3)核实Django是否正确的创建了项目,命令:python manage.py runserver
这里Django启动了一个服务器,让你可以查看系统中的项目,了解他们的工作情况。当你在浏览器中输入URL以请求网页时,Django服务器将进行响应:生成合适的网页,并将其发送给浏览器。
这里Django通过检查确认正确地创建了项目
这里指出了使用的Django版本以及当前使用的设置文件的名称
这里指出了项目的URL。http://127.0.0.1:8000/表明项目将在计算机的端口8000上侦听请求,而不允许其他任何人查看你正在开发的网页的服务器。
!!!!!注意,到了关键的地方,试试水。
打开一个浏览器,输入http://localhost:8000/,如果这个不管用,则输入http://127.0.0.1:8000/,然后你将看到:
这个页面是Django创建的,若要关闭这个服务器,按Ctrl+C即可。
注意:如果出现错误消息:“That port is already in use”(指定端口已被占用),请执行命令:python manage.py runserver 8001,让Django使用另一个端口,如果这个端口也不可用,就不断执行上述命令,并逐渐增大其端口号,直到找到能用的端口。
----------------------------------------创建应用程序----------------------------------------
Django项目是由一系列应用程序组成,他们协同工作,让项目成为一个整体。
【一】创建应用程序所需要的基础设施
(1)
命令:python manage.py startapp learning_logs让Django创建应用程序所需的基础设施。
(2)查看目录
查看项目目录会发现,现在多了一个文件夹learning_logs
(3)查看文件夹learning_logs
会发现里头的东西还是挺多的,其中最重要的是models.py、admin.py、views.py。
【二】定义模型
(1)进入文件夹learning_logs中,打开models.py
原型是这样的:
这为我们导入了模块models,还让我们创建了自己的模型。模型告诉Django如何处理应用程序中的存储数据。
然后加上下面的一段代码:
这里,我们创建了一个名为Topic的类,他继承了Model---Django中一个定义了模型基本功能的类。Topic类只有两个属性:text和date_added。
1、属性text是一个CharField-由字符或文本组成的数据。需要存储少量的文本,如名称、标题或城市时,可使用CharField。定义CharField属性时,必须告诉Django该在数据库中预留多少空间。在这里,我们将max_length设置成了200,。
2、属性date_added是一个DateTimeField-记录日期和时间的数据。我们传递了实参auto_now_add=True,每当用户创建新主题时,这都让Django将这个属性自动设置成当前日期和时间。
3、方法__str__()用来返回存储在属性text中的字符串,如果使用的是python2.7,应调用方法__unicode__(),但其中的代码相同。
【三】激活模型
要使用模型,必须让Django将应用程序包含到项目中。
(1)进入文件夹learning_log中,打开settings.py,找到这一段:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
这是一个元组,告诉Django项目是由哪些应用程序组成的,在最后面加上这一句:'learning_logs',变成这样:
(2)接下来,需要让Django修改数据库,使其能够存储与模型Topic相关的信息。
执行命令:python manage.py makemigrations learning_logs
命令makemigrations 让Django确定该如何修改数据库,使其能够存储与我们定义的新模型相关联的数据。输出表明Django创建了一个名为0001_initial.py的迁移文件,这个文件将在数据库为模型Topic创建一个表。
(3)下面来应用这用迁移,让Django修改数据,执行命令:python manage.py migrate
在这里,Django确认为learning_logs应用迁移时一切正常(OK)。
每当要修改管理数据时,都采取如下三个步骤:
1、修改models.py
2、对learning_logs调用makemigrations
3、让Django迁移项目
【四】Django管理网站
(1)创建超级用户,执行命令:python manage.py createsuperuser,然后会有用户名、邮箱、密码,密码需要输两次,因为我之前创建过一次,不能重复输入同样的名字,就不贴出来了。
注意:Django并不存储输入的密码,而存储从该密码派生出来的一个字符串-散列值。每当输入密码时,Django都计算其散列值,并将结果与存储的散列值进行比较。如果这两个散列值相同,就通过了身份验证。通过存储散列值,即便黑客获得了网站数据库的访问权,也只能获取其中存储的散列值,而无法获取密码。在网站配置正确的情况下,几乎无法根据散列值推导出原始密码。
(2)向管理网站注册模型
Django自动在管理网站中添加了一些模型,如:User和Group,但对于我们创建的模型,必须手动进行注册。
进入learning_logs文件中,打开admin.py
原型:
向管理网站注册Topic,在后面添加如下代码:
from learning_logs.models import Topic
admin.site.register(Topic)
添加这些代码导入要注册的模型Topic,再使用admin.site.register(Topic)让Django通过管理网站管理我们的模型。
现在,使用超级用户账户访问管理网站,打开浏览器输入:http://localhost:8000/admin/,并输入用户名和密码,将看到:
登录之后是这样的:
这个网页可以让你添加和修改用户和用户组,还可以管理与刚才定义的模型Topic相关的数据,添加一个主题Chess和Rock Climbing,并保存。
注意:如果在浏览器中看到一条消息,指出访问的网页不可用,请确认在终端中是否运行了Django服务器。如果没有,请先激活虚拟环境,执行命令:ll_env\Scripts\activate,然后再运行服务器,执行命令:python manage.py runserver。
【五】定义模型Entry
要记录学到的象棋和攀岩知识,需要为用户可在学习笔记中添加的条目定义模型。
进入learing_logs文件中,打开models.py,在后面添加下面一段代码:
class Entry(models.Model):
#学到的有关某个主题的具体知识
topic=models.ForeignKey(Topic)
text=models.TextField()
date_added=models.DateTimeField(auto_now_add=True)
class Meta:
verbose_name_plural='entries'
def __str__(self):
#返回模型的字符串表示
return self.text[:50]+"..."
【六】迁移模型Entry
因为我们定义了了一个新模型Entry,因此需要再次迁移数据库。
(1)执行命令:python manage.py makemigrations app_name【应用程序名】
具体情况:
这里会生成一个新的迁移文件-0002_entry.py,他告诉Django如何修改数据库,使其能够存储与模型Entry相关的信息。
(2)执行迁移命令
后面如果有OK,就说明迁移成功了。
【七】向管理网站注册Entry
(1)定义和迁移完之后,我们还要注册模型Entry。打开admin.py文件修改成这样:
from django.contrib import admin
# Register your models here.
from learning_logs.models import Topic,Entry
admin.site.register(Topic)
admin.site.register(Entry)
红色部分是修改的,保存之后,打开浏览器,输入http://localhost/admin或者http://127.0.0.1:8000/admin/(我用前面的不成功,后面的就可以了),记得要先运行浏览器,不然打不开页面。执行命令:python manage.py runserver。这个时候你将看到learning_logs下面多了一个Entries。单击Entries的Add链接,或者单击Entries
再选择Add entry。将看到一个下拉列表,点击并在里面添加东西。
保存。
【八】Django shell
输入了一些东西之后,就可以通过交互式终端会话以编程的方式查看这些数据,这种交互式环境称为Django shell,是测试项目和排除故障的理想之地。
(1)执行命令:python manage.py shell
启动一个python解释器,可使用它来探索存储在项目数据库中的数据。
(2)
这里导入了模块learning_logs.models中的模型Topic,然后使用方法Topic.objects.all()来获取模型Topic的所有实例,它返回的是一个列表,称为查询集,我们可以像遍历列表一样遍历查询集。
(3)查看主题对象的ID
返回的查询集存储在topics中,然后打印每个主题的id属性和字符串表示。这里可以看到,主题Chess的ID为1,Rock Climbing的ID为2。知道对象的ID后,就可获取该对象并查看其任何属性。
(4)查看主题Chess的属性text和date_added的值
(5)查看与主题相关联的条目
注意:每次修改完模型之后,都需要重启shell,这样才能看到修改之后的效果。要退出shell的话,可以按Ctrl+Z,再按回车键。
--------------------------------------------创建网页:学习笔记主页--------------------------------------
使用Django创建网页分为三个阶段:定义URL、编写视图和编写模板。首先,必须定义URL模式。URL模式描述了URL是如何设计的,让Django知道如何将浏览器请求与网站URL匹配,以确定返回哪个网页。
【一】映射URL
用户通过单击在浏览器中输入URL以及单击链接来请求网页,因此需要确定项目需要哪些URL。主页的URL最重要,它是用户用来访问项目的基础URL。我们要把基础URL映射到“学习笔记”的主页。
(1)打开项目主文件夹learning_log中的文件urls.py,原始代码是这样的:
from django.conf.urls import include,url
from django.contrib import admin
urlpatterns = [
url(r'^admin/',include(admin.site.urls)),
]
前两行导入了为项目和管理网站管理URL的函数和模块。变量urlpatterns包含了项目中的应用程序的URL。admin.site.urls:该模块定义了可在管理网站中请求的所有UR。
现在我们需要把learning_logs的URL包含进去,进行修改,变成这样:
from django.conf.urls import include,url
from django.contrib import admin
urlpatterns = [
url(r'^admin/',include(admin.site.urls)),
url(r'',include('learning_logs.urls',namespace='learning_logs')),
]
(2)然后需要在文件夹learning_logs中创建一个urls.py文件,为了区别learning_log文件夹中的urls.py文件,在开头做了一个小标识:#定义learning_logs的URL模式
代码:
#定义learning_logs的URL模式
from django.conf.urls import url
from . import views
urlpatterns=[
#主页
url(r'^$',views.index,name='index'),
]
解释一下:
1、我们先导入了函数url,用它来将URL映射到视图
2、导入了模块views,其中的句点让python从当前的urls.py模块所在的文件夹中导入视图。
3、变量urlpatterns是一个列表,包含可在应用程序learning_logs中请求的网页。
4、实际的URL模式是对函数url()的调用,这个函数接受三个实参。第一个是一个正则表达式r'^$',其中的r让python将接下来的字符串视为原始字符串,而引号告诉python正则表达式始于和终于何处。脱字符(^)让python查看字符串的开头,而美元符号让python查看字符串的结尾;’第二实参制定了要调用的视图函数;第三个参数将这个URL模式的名称指定为index,让我们能够在代码的其他地方引用它。每当需要提供到这个主页的链接时,我们都将使用这个名称,而不编写URL。
【二】编写视图
视图函数将接受请求中的信息吗,准备好生成网页所需的数据,再将这些数据发送给浏览器。
当你执行命令:python manage.py startapp时,learning_logs文件夹中会自动生成一个views.py文件。