一、首先djiango是什么:djiango是一个由python编写的开源的web框架,就像Spring和Boot一样,方便我们进行动态网页开发。而Python 加 Django 是快速开发、设计、部署网站的最佳组合。
主要用途有网站、微信公众号、小程序后端开发等,只要是http请求的,都可以用它实现。以及人工智能平台融合,比如翻译用户的需求再去执行用户需求。
二、django包含哪些组件:
1.配置文件and路由系统
要写大量的配置项,请求交给谁处理,响应是什么。
2.MTV模型
为了各组件间保持松耦合关系,采用MTV的架构模式,把系统分为三个层次:模型(Modle),模板(Template),视图(View)。
模型层,连通数据库的。
模板层,页面展示
视图层,负责业务逻辑,调用
3.cookies和Session
经典的记住http状态的两种机制,可以弥补HTTP协议无状态的不足,Session(会话)通过在服务器端记录信息确定用户身份。用来跟踪用户的整个会话。
4.分页及发邮件
5.Admin管理后台
三、练手
下载djiango:pip install Django == 3.2.6,显示successful就可以了。
#安装完django之后,终端会有django-admin命令。mysite为任意项目名.
django-admin startproject mysite
#进⼊项⽬
cd mysite#目录下有两个文件,一个是项目的同名文件,一个是manage.py
#启动服务,不指定端⼝号则默认8000端⼝
python manage.py runserver 端⼝号
http://127.0.0.1:8000 #浏览器输⼊url
#tips:如果启动失败就是目前端口被占用了。
#关闭服务为ctrl+c
#直接执行python manage.py命令即可查看所有的Django子命令
#manage.py包含项目管理的子命令
python manage.py runserver#启动项目
python manage.py startapp#创建应用
python manage.py migrate#数据库迁移
python manage.py check app1#检查应用是否有常见的问题
在mysite项目目录中,在项目同名文件夹内有以下文件:
1.settings.py配置文件:
包含了Django项目启动的所有配置项。分为公有配置和自定义配置,共有配置是Django官方提供的基础配置,。
配置项格式示例:BASE_DIR = 'XXX', 变量名字一定大写,自定义的要个性化一些避免和官方配置重名。值可以是数值,字符串,字典,数组,等等。
BASE_DIR = Path(__file__).resolve().parent.parent
#项⽬绝对路径,可以直接print查看一下
DEBUG = True
#启动模式, True=调试模式,1.检测到代码改动后,立即重启服务
#2.提供信息量很大的报错页面,这样特别友好,耐心看肯定能解决bug。但是对外开放的时候要改为false, #False=正式上线。
#True好处: 1、 django检查代码改动,如果检查代码修改回⽴刻重启/⽣效
# 2、提供报错⻚⾯(信息量极⼤)
#False好处:报错信息极简,保护隐私。
ALLOWED_HOSTS = []
#甄别请求头Host值,只有在列表ALLOWED_HOSTS⾥⾯的host值,才能访问。正式上线的时候需要配置,可以过滤⼀些脏请求。即并不是发往本服务器的请求
#也可以设置成'*'--不管host多少 全部接受, []则只接受本地
#其他电脑能访问: python manage.py runserver 0.0.0.0:端⼝ + ALLOWED_HOSTS = ['内⽹ip']
#例如我在202.205.99.193上设置项⽬,要设置成ALLOWED_HOSTS = ['202.205.99.193']
#主路由⽂件路径
ROOT_URLCONF = 'ceshi.urls'
#语⾔设置
LANGUAGE_CODE = 'en-us' #中⽂'zh-Hans'
#时间标准
TIME_ZONE = 'UTC' #格林尼治时间 可以设置成别的区,东⼋区设置: 'Asia/Shanghai'
2.URL和视图函数
ULR组成:
protocol://hostname[:port]/path[?query][#frament] 中括号内的可以没有
·protocol:协议,http,https,file
·hostmane:存放资源的服务器的域名系统(DNS)主机名、域名或者IP地址
·port:端口号
·path:一般用来表示主机上的一个目录或者文件地址,路由地址决定了服务器如何处理该请求
·query:查询字符串,以问号开头。具体描述需要的哪个资源。
·fragment:信息片断。锚点,表示,输⼊后可以直接定位到⽹⻚中的锚点位置
django处理URL请求:
1.从配置文件中根据ROOT_URLCONF,找到主路由文件,默认为项目同名目录下的urls.py
2.加载主路由文件中的urlpatterns变量(变量是包含很多路由的数组,数组里有很多路由)
(数组在urls.py文件内。)
urlpatterns = [
path('admin/', admin.site.urls),
#直接在下面接着写上自定义的path即可,逗号后面就是对应的视图函数
]
3.一次匹配urlpatterns中的path,匹配到第一个合适的中断后续匹配
4、匹配成功->调研对应的视图函数处理请求,返回响应;匹配失败->返回404
视图函数
#专⻔负责接收http请求的,返回响应
#习惯直接将视图⽂件命名为 name1/name1/views.py
#返回对象必须是HttpResponse变量
语法格式:
在项目同名文件夹下定义函数文件:
from django.http import HttpResponse
def page1_view(request[,其他函数,可以没有]):
html='这是第⼀个⻚⾯
'
return HttpResponse(html)
3.路由配置
settings.py 中的‘ROOT_URLCONF’指定了主路由配置列表urlpatterns的文件位置
#导⼊
from django.urls import path
#语法
path函数:
path(route,views.name=None)
参数:
route:字符串类型,匹配的请求路径/路由; views,对应的视图处理函数的名称(注意一定不要加括号,引入的数函数本身); name:为地址起别名
path转换器:
可以匹配到str、 int、 slug(A-B-V这种短标签)、path
语法:<转换器类型:自定义名>
作用:若转换器类型匹配到对应的数据,则将数据按照关键字传参的方式传递给视图函数
例如:path('page/',views.xxx)
data/、 data/、 data/
4.请求
请求是指HTTP协议发送给服务器端的数据。
请求在django中就是视图函数的第一个参数request,即HttpRequest对象,HttpRequest对象通过属性描述请求的所有相关信息。django接收到http协议的请求后,会根据请求数据报文创建HttpRequest对象。
常用的请求方式:
对request的常⻅操作
from django.http import HttpResponse, HttpResponseRedirect
def test(request):
print('path info is',request.path_info)#⽬录
print('method is',request.method)#请求⽅式
print('querystring is',request.GET)#请求的属性构造的字典
print('path:',request.get_full_path())#请求的完整路径
return HttpResponseRedirect('/page/1')#重定向,给一个urls里面有的地址,注意前面加上/
5.响应
响应是指服务器端接受到请求后去做相应的处理再回复给浏览器端的数据。
·django中的响应对象:
HttpResponse(content=响应体数据类型,content_type=响应体数据类型,status=状态码)
-content:表示返回内容
-content_type:指定返回数据的MIME类型(默认为text/html)浏览器会根据这个属性来显示数据。如果是text/html就会解析这个字符串,如果是text/plain就会显示一个纯文本。
-status:表示返回的HTTP响应状态码,默认为200
常用的Content_Type有:
text/html(默认的,htnl文件), text/plain(纯文本), text/css(css文件),text/javascript(js文件),multipart/form_data(文件提交),application/json(json传输),application/xml(xml文件)
作用:向客户端浏览器返回响应,同时携带响应体内容
·常见的响应状态码:
200-请求成功
301-永久重定向 (登录就容易发现这个和302)
302-临时重定向
404-请求资源不存在
500-内部服务器错误
⼤致的状态码
1** 信息,服务器接收请求,需要请求者继续操作
2** 成功
3** 重定向,需要进⼀步操作
4** 客户端错误,请求包含错误或者⽆法完成该请求
5** 服务器错误,服务器在处理请求过程中发⽣错误
6.GET和POST
无论是GET还是POST等等请求方式,都统一由视图函数接受请求,通过判断request.method区分具体的请求动作。
if request.method == 'GET':
处理GET请求时的业务逻辑
elif request.method == 'POST':
处理POST请求的业务逻辑
一般是接收处理客户端数据
else:
其他请求逻辑
GET请求一般用于向服务器获取数据。例如以下场景:
·浏览器地址栏中输入URL然后回车
问号就是查询的意思。 p是参数8是值,通过GET获取。
POST方法:
一般用于向服务器提交大量/隐私数据。客户端通过·表单等POST请求将数据传递给服务器端。例如:
这里的method和action都需要写好
form表单提交的name属性就是key,⽅法和get⼀样只不过GET变成POST,
request.POST['参数名']
request.POST.get('参数名','默认值')
request.POST.getlist('参数名')
post需要取消csrf验证,禁⽌掉settings.py中MIDDLEWARE中的CsrfviewMiddleware中间件,否则django将会拒绝客户端发来的POST请求,报403响应。
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
#'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
#这只是学习尚浅的暂缓之际
注意在学习过程中,随时可以按ctrl+sift+i去查看网络中发出的请求,查看请求头响应头和请求方式等信息,在参数处查看提交的数据。
参考b站2021最新版Django全套视频(django框架快速上手)_哔哩哔哩_bilibili