Django入门学习笔记

Django是一个web框架,一套用于帮助开发交互式网站的工具。Django能够响应网页请求,还能让你更轻松的读写数据库、管理用户等。

要使用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文件。







  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值