0%

Python|django框架入门1

django学习第一弹,原理,配置及URL规则!!!

Django建站基础

网站组成

一个完整的网站大概包含域名、网站应用和服务器

域名:域名可理解为网站的链接,用于标识一个或多个IP地址(门牌号)

网站应用:网站应用是指这个网站有哪些页面,这些页面有什么功能并且如何实现这些功能(房子内部装饰)

服务器:服务器是连接到互联网的计算机算机,用于网站应用的部署和上线

虚拟主机:虚拟主机是在网络服务器上划分出一定的磁盘空间供用户放置站占和应用组件,提供必要的站点功能、数据存放和传输功能(供租用的房子)

网站运行原理

客户端:在计算机上运行并连接到互联网的应用程序,简称浏览器

服务器:能连接到互联网且具有IP地址的计算机,服务器主要接收和处理用户的请求信息。

用户在客户端操作网页时,实质是向网站发送一个HTTP请求,网站的服务器接收到请求后今步行相应的处理,最后将处理结果返回到客户端并生成相应的网页信息

IP地址:互联网上的每台计算机都有一个IP地址,用于识别和通信,即为逻辑地址。在定位设备中则转换为MAC地址,即物理地址

DNS:域名系统,用于跟踪计算机的域名及共在互联网上相应的IP地址

TCP/IP:传输控制协议/互联网协议,是广泛使用的通信协议

HTTP:超文本传输协议,是浏览器和服务器通过互联网进行通信的协议

了解了网站运行的原理后,感觉豁然开朗呀!多看一些理论也是非常有用的

走进Django

Django采用了MTV的框架模式,即模型( Model)、模板(Template )和视图(Views),三者之间各自负责不同的职责。这些也是学习的重点板块

Django的主要目的是简便、快速地开发数据库驱动的网站,有许多功能强大的第三方插件,强调代码复用性——so,快速开发和DRY ( Do Not Repeat Yourself)是Django的处事原则

Django有什么:

组成 内容
对象关系映射 将模型与关系数据库连接起来
URL设计 开发者可以设计任意的URL 网站地址
模板系统 模板之间具有可继承性
Cache系统 完善的缓存系统,可支持多种缓存方式
用户管理系统 提供用户认证、权限设置和用户组功能
admin管理系统 内置admin管理系统,系统扩展性强

感觉在为Django打广告(尴尬……)

创建项目

1.创建项目主体

在目标文件通过cmd输入该命令,即可创建一个名叫“MyDjang”的主文件

1
django-admin startproject MyDjang
2.创建项目应用

项目应用简称为App,相当于网站的功能。每个App代表网站的一个或多个网页

在新建项目主体下输入命令:分别创建了index和user两个网页

1
2
3
4
python manage.Py startapp
index

python manage.Py startapp user

对各个文件的功能的解释

文件 功能
manage.py 命令行工具
init.py 初始化文件,不需要修改
settings.py 项目的配置文件,经常要修改
urls.py 项目的URL设置,网站的地址信息
wsgi.py Python应用与Web服务器之间的接口,用于Django项目在服务器上的部署和上线,一般不需要修改
admin.py 后台管理系统
apps.py 当前应用的配置,无需修改
mdoels.py 实现数据库和表单的地方
views.py 视图,生成页面处理信息,是django主要写代码的地方
3.启动项目

在项目下输入命令行

1
python manage.py runserver
4.PyCharm

另外也可以在PyCharm(要钱的开发者版)搭建开发环境,它会自动生成一些重要的文件夹。

用社区版的PyCharm则需要用上述的命令行操作,也要自己添加重要文件如:templates(存放html文件)

Django配置信息

配置信息存放在setting.py,在此处修改相关配置信息

基本配置信息

1.调试模式

开发阶段时是True,上线部署时一定要改成False,否则会泄露信息

1
2
#调试模式
DEBUG = True
2.App列表

把自己创建的App添加到App列表 ,否则这些app是无法被运行的

1
2
3
4
5
6
7
8
9
10
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'index',
'user',
]

静态资源

存放网页的css和js,图片音频等

存放位置,在setting.py中设置,此处设置的是在App目录下的static文件

1
2
3
4
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.0/howto/static-files/

STATIC_URL = '/static/'

在app文件下新建static文件来存放js和css文件

模板路径

模板在web开发中是指一种特殊的HTML文档,其中嵌入了一些可以被python识别的指令。

模板配置信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [], #此处可以配置模板路径,留空则默认在templates文件下存放
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]

templates文件可放于根目录下(共用模板文件)和app文件下

配置模板代码如下

1
2
3
'DIRS': [os.path.join(BASE_DIR, 'templates'),
#配置存放于根目录下的templates os.path.join(BASE_DIR, 'index/templates')],
#配置存放于app下的templates

数据库配置

django有四种数据库引擎

1
2
3
4
'django.db.backends.postgresql'
'django.db.backends.mysql'
'django.db.backends.sqlite3'
'django.db.backends.oracle'

项目默认使用轻型数据库——Sqlite3,其常用于嵌入式开发,其配置信息如下

1
2
3
4
5
6
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}

但是比较常用的是MySQL数据库,配置连接的数据库为MySQL数据库

1
2
3
4
5
6
7
8
9
10
DATABASES = {
'default': {
'ENGINE': 'django . db.backends .mysql',
'NAME': 'django_db',
'USER' : ' root' ,
'PASSWORD' : '1234',
'HOST' : '127.0.0.1',
'PORT':'3306',
}
}

此处只连接了MySQL中一个名叫django_db

的数据库,实际开发中要连接多个数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
DATABASES = {
#第一个数据库
'default': {
'ENGINE': 'django . db.backends .mysql',
'NAME': 'django_db',
'USER' : ' root' ,
'PASSWORD' : '1234',
'HOST' : '127.0.0.1',
'PORT':'3306',
}

#第二个数据库
'MyDjango': {
'ENGINE': 'django . db.backends .mysql',
'NAME': 'django_db',
'USER' : ' root' ,
'PASSWORD' : '1234',
'HOST' : '127.0.0.1',
'PORT':'3306',
}
}

实际上就是python中的两个字典

中间件

中间件是处理Django的request和response对象的钩子。

请求(request):如用户在网站点击了某个按钮就会发送请求

处理( response):网页会根据用户的操作返回相关的网页内容,即为响应处理

而中间件就是处理请求信息的中枢点

开发者可以自定义中间件,但一般来说,django默认的中间件已满足了大部分需求

编写URL

url简单来说就是网址,每个地址代表不同的网页

URL规则

1.目录调整

每一个app都添加独立的静态资源(static文件)和模板文件夹(templates文件),以及urls.py文件。app中的urls.py文件管理属于该app的url,而项目根目录的urls.py统一管理每一个app的urls.py。

2.运行原理

程序收到用户请求时,根目录uels.py查找URL属于哪个app,然后在app的urls.py里找到具体urls.py信息

3.案例

根目录下的urls.py

1
2
3
4
5
6
7
from django.contrib import admin        #导入admin功能模板
from django.urls import path,include #导入URL编写模板

urlpatterns = [
path('admin/', admin.site.urls), #admin站点管理地址
path('',include('index.urls')), #首页地址
]

URL为空即为网站域名,include是将该URL交给index的urls.py处理

index的urls.py

编写URL信息

1
2
3
4
5
6
from django.urls import path
from .import views

urlpatterns = [
path('',views.index), #导入同目录下的views.py文件,并应用其中的index方法
]

views.py的编写

views.py用于编写视图函数(功能函数),处理URL请求的信息返回网页内容给用户(所以可以和html联系起来)

1
2
3
4
from django.http import HttpResponse

def index (request) :
return HttpResponse("Hello world")

(1)index函数内必须设置request代表当前用户的请求对象(包含用户名,请求内容,请求方式)

(2)视图函数执行完后,必须要用return返回处理结果,否则报错

带变量的URL

想要一个URL代表多个不同页面,这时候就要用到带变量的URL了

1.变量类型
变量类型 简介
字符类型 匹配任何非空字符串,默认类型
整型 匹配0和正整数。
slug 理解为注释、后缀,用作URL解释性字符
uuid 匹配一个uid格式的对象
2.案例

在index的urls.py中编写

1
2
3
4
5
6
7
8
from django.urls import path
from .import views

urlpatterns = [
path('',views.index),
##添加带有字符类型、整型和slug的URL
path('<year>/<int:month>/<slug:day> ',views.mydate)
]

URL用符号”<>”设置变量,如上

  • :字符类型变量year
  • int:month : 整型变量month

在views.py中编写

1
2
3
4
5
from django.http import HttpResponse

#获取URL中的参数year,month,day
def mydate(request,year,month,day) :
return HttpResponse(str (year) +'/'+ str (month) +'/'+ str (day) )

URL的变量要与视图函数的函数一一对应(一个空格都要对应)

3.url中的正则表达式

正则表达式的作用是对URL的变量进行截取和判断

1
2
3
4
5
6
7
8
from django.urls import path,re_path #引入re_path功能模板
from .import views

urlpatterns = [
path('',views.index),
#添加带有字符类型、整型和slug的URL
re_path('(?P<year>[0-9]{4})/(?P<month>[0-9] {2})/(?P<day>[0-9]{2}).html',views.mydate)
]

以(?P<year>[0-9]{4})为例介绍:

  • ?P是固定格式
  • <year>为变量的编写规则
  • [0-9]{4}为匹配模式,代表变量长度为4,只允许取0~9值

设置name参数

实际就是为URL命名,再在html中用{% url 'name' value %}的格式引用,即href属性的链接是动态链接。(name是URL的名字,value是URL中设置的参数)