1.安装Django(Windows环境)
首先需要确定系统中存在python环境,当前,本机的python环境为python 3.6.6,可以使用命令python --version进行查看。
在python环境成功搭建的基础上,我们使用命令pip install django即可进行django环境的安装和部署。
2.部署第一个django项目
在成功使用pip安装django包后,系统中会出现一个django-admin的命令。可以在cmd中尝试输入django-admin查看是否能够找到该命令。
在django-admin命令能够成功运行时,我们可以使用
django-admin startproject [项目名称]
来新建我们第一个django项目。
在这里,我们使用
django-admin startproject demo1
进行第一个项目的创建测试。
运行该创建项目的命令后,可以发现我们在当前木下能够多出一个Demo1的目录,该目录就是项目的路径。
3.django项目的目录结构
以创建的Demo1项目为例,
一级目录下:
二级目录Demo1下:
4.启动Django服务(Dev阶段)
(1)进入项目目录。
Cd Demo1
(2)启动django服务。
Python manage.py runserver [端口号]
如果在runserver后指定了端口号,则目标端口号就会打开,HTTP请求可以发送到目标端口号。
通过打开的命令,可以发现,在倒数第三行,有一行提醒,当前的Django版本号为3.2.16,且当前使用的配置文件为Demo1.settings,因此后续对django项目的配置文件的设置可以通过对Demo1.settings的修改作为对目标Demo的配置的修改。
(3)打开浏览器访问本地目标端口。
出现该页面,则意味着django服务成功启动。
这种启动方式建议只在测试开发中进行使用。
在该测试页面中,下方存在三个可选项,特别是右边第一个Django Document,如果点击将会直接跳转到django的官网,其中有django的官方文档。并提供了django的一些轻量化演示站点和社区的反馈渠道。
当第一次启动django的时候,将会出现一个新的文件。Db.sqlite3,该文件是一个数据库文件。
5.尝试更换Django的端口号
Control + C命令强制退出8080端口的监听,并使用命令
Python manager.py runserver 5000
监听本地5000号端口。可以看到当前已经成功监听到了5000端口。
可以看到环境已经成功的进行搭建。
使用命令
netstat -anot | findstr “5000”
可以查看当前端口的开放情况。
6.关闭django服务
1.如前所述,在命令行使用control+c强制退出该程序。
2.Windows下使用taskkill /F /IM [程序名]强制杀死该程序
如果在linux环境下,使用lsof -i:5000即可查询到该端口的占用程序,并使用kill -9 [进程号] 来强制杀死该进程,思路和windows上的操作是相同的。
运行完该命令后,可以发现当前django服务已经无法访问。
7.Django中的manage.py的使用
1.python manage.py runserver 启动服务
2.Python manage.py startapp 创建应用
3.Python manage.py migrate 数据库迁移
…
…
通过该方法,可以发现自动的列出了执行命令。这些命令在使用过程中将会逐渐的熟练。
因此,manage.py也是django项目的核心入口。
在当前manage.py的所在目录中,有一个和manage.py的平级的目录。
init.py,是python包的初始化文件
Wsgi.py 是web服务网关的配置文件。Django正式启动的时候需要用到。
Urls.py是路由文件。作为项目的主路由配置。
Settings.py是项目的配置文件,包含项目启动时需要的配置。
8.通过修改settings.py针对django启动项目所需的配置
1.Settings.py 包含了Django项目启动所需要的所有的配置项。
2.配置项分为公有配置和自定义配置。
3.配置项的格式为BASE_DIR=’xxxx’
4.公有配置 - Django官方提供的基础配置。
分析配置文件,可以通过:
BASE_DIR = Path(_file_).resolve().parent.parent
BASE_DIR得到的是项目的解决路径。
django setting.py中的SECRET_KEY
当您使用 创建一个新的 Django 项目startproject时,该 settings.py文件会自动生成并获取一个随机 SECRET_KEY值。该值是保护签名数据的关键——确保其安全至关重要,否则攻击者可以使用它来生成自己的签名值。
SECRET_KEY,用于提供加密签名,并且应该设置为唯一的、不可预测的值。
警告: 使用公开的的SECRET_KEY 运行Django会击败Django的许多安全保护,并可能导致特权升级和远程代码执行漏洞。 因此,SECRET_KEY 不能泄漏!
django setting.py中的Debug
Debug只有两个取值,一个为True,一个为False。
当Debug为True时,意味着当前系统状态为Debug调试模式,访问浏览器会出现友好的提示界面,并显示当前系统的一些报错信息等敏感信息。
如果Debug为False时,则意味着当前系统为正式运行的模式,则需要对ALLOWED_HOSTS进行配置。否则,在runserver的时候会出现报错,服务将无法正常的进行启动。
ALLOWED_HOST是一个python中的list,ALLOWED_HOST是一个白名单,意味着当前项目所绑定的域名、ip地址,如果用户访问的ip地址和域名不在白名单内,则用户将无法访问该web服务。因此,在本地测试的时候,如果debug设置成了False,ALLOWED_HOST中的内容可以设置成 ALLOWED_HOST=[“127.0.0.1”]
特点1:当Debug为True时,系统状态为调试模式,则当前编写的代码将会立即生效,系统会自动的检测代码的改动状态。
特点2:当Debug为True时,浏览器访问某个地址的时候,如果代码出现问题,则会提供一个有助于我们排错的报错页面,报错页面中的信息量极大,有利于开发人员进行Debug。
例如目标访问的页面存在404
对于ALLOWED_HOST的补充
如果局域网中的其他主机想要访问本机提供的服务,需要在manager.py runserver的时候指定监听的host为0.0.0.0,即,如果需要监听8000端口,则运行时的命令为python manager.py runserver 0.0.0.0:8000,并且在ALLOWED_HOST中需要绑定当前机器的ip地址。
那么局域网中其他主机对当前服务进行访问的时候,http请求中的host值将会和allowed_host中的白名单的值相对应,局域网中的其他主机也就能访问当前机器开放的django服务了。
例如:
出现了报错。
配置ALLOWED_HOST配置本机的ip地址。
ALLOWED_HOST=[“192.168.124.8”]
可以发现没有报错信息了,成功的进行了访问。
ROOT_URLCONF的配置
主路由文件的指定。
LANGUAGE_CODE的配置
主要是针对语言进行管理。
例如LANGUAGE_CODE改为zh-Hans
TIME_ZOME的配置
中国的时区为UTC+8
在SETTINGS.PY中,只要符合命名规范,也可以进行个性化配置。需要避开官方配置。
引入方法:from django.conf import settings
9.URL和视图函数。
Url,格式为:
protocol://hostname:[:port]/path[?query][#fragment]
关于url请求的处理。
1.Django从配置文件中根据ROOT_URLCONF找到主路由文件,默认情况下,该文件在项目名称相同的目录下的urls.
2.Django加载主路由文件下的urlpattern变量,这个变量是一个包含很多路由的数组
3.依次匹配这个变量中的path。如果匹配到了就停止匹配,有且匹配第一个匹配到的。
4.匹配成功则进行相应的处理,返回相应信息,如果没有匹配到,那么就会返回404相应。
在urls.py文件中,urlpattern的数组中,使用Path函数进行增加路由,第一个参数为需要匹配的路径,第二个参数为视图函数。
视图函数
视图函数主要的作用就是用于接受http请求,并响应给浏览器。
语法:
def xxx_views(request,[其他参数...]):
Return HttpResponse对象.
第一个参数需要为request请求,也就是http请求,而返回信息一定是HTTP的response,所以视图函数的主要作用就是根据业务逻辑返回相应的响应内容给浏览器。
其他参数可以视选择进行传入,一般为GET和POST或得到的数据。也可以是FILE文件流信息。
可以在项目同级文件夹下,建立一个views.py(习惯化,写作virews),例如:
from django.http import *
def page_view(request):
Html = “HELLO,WORLD”;
Return HttpResponse(Html);
在完成视图函数后,可以在urls.py文件中,在urlpatterns列表中,增加路由和视图函数的绑定规则,例如
Urlpatterns = [
Path(‘admin’,admin.site.urls),
Path(‘page/test/’,views.page_view)
]
通过这种方法,page_view就和views成功的进行了绑定。
这样,当我们访问浏览器的时候,就可以拿到我们视图函数中定义的返回信息。
因此,用户的请求path可以被django的主路由文件进行自动的处理,并返回给服务器的后端处理,处理后使用HttpResponse返回给浏览器,并得以展示。
10.关于Path函数
关于path()函数
导入 -
from django.urls import path
语法 -
path(route,views,name=None)
参数1:
1.route:字符串类型,匹配对应的请求路径。(最优匹配)
2.Views:指定路径所对应的视图处理的函数的名称
3.Name:为地址起别名,在模板中地址反向解析时进行使用。避免因为route参数的字符串长度太长时,在反向解析是过于复杂,使用了该别名进行处理。
特别情况:如果需要增加的路由规则过多,则需要使用path转换器。
语法:<转换器类型:自定义名>
作用:若转换器类型匹配到对应类型的数据,则将数据按照关键字传参的方式传递给视图函数。
例子:
path(‘page/<int:page>’,views.xxx)
转换器类型:
1.str,匹配除了’/’以外的非空字符串
2.int,匹配0或者任何正整数。返回一个int
3.slug,匹配任意由ascii字母或者数字以及连字符和下划线的短标签。
4.path,匹配非空字段,包含路径分隔符’/’
那么,为了实现例子展示的效果,则可以使用如下代码在views.py中进行实现。
def page(request,page):
html = page
return HttpResponse(html)
虽然例子中,转换器类型可以为str、path、slug,但是如果转换器类型为int时,语义最为精确,因此此处最好使用最精确的语义对我们需要描述的路由规则进行描述。
在常规使用过程中,str、int两种转换器类型最为常见。