Day46 Django的基本使用、

时间:2022-08-25 12:27:49

基础http:

 

HTTP协议简介(尾生抱柱)

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。

HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。

HTTP协议特性

  • 基于TCP/IP协议

http协议是基于TCP/IP协议之上的应用层协议

  • 基于请求—响应模式

HTTP协议规定,请求从客户端发出,然后服务器端响应 该请求并返回。

  • 无状态保存

HTTP是一种不保存状态,即无状态(stateless)协议。HTTP协议 自身不对请求和响应之间的通信状态进行保存。HTTP/1.1虽然是无状态协议,但为了实现期望的保持状态功能, 于是引入了Cookie技术。

  • 无连接

无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。

HTTP请求协议与响应协议

http协议包含由浏览器发送数据到服务器需要遵循的请求协议与服务器发送数据到浏览器需要遵循的响应协议。用于HTTP协议交互的信息被为HTTP报文。

请求端(客户端)的HTTP报文 做请求报文,响应端(服务器端)的 做响应报文。HTTP报文本身是由多行数据构成的字文本。

请求协议
GET / HTTP/1.1    # 请求行
Host: 127.0.0.1:8889   #  请求头部
Connection: keep-alive  #  请求头部
Upgrade-Insecure-Requests: 1  #  请求头部

...   # 请求体

 

Day46 Django的基本使用、

响应协议

HTTP/1.1 200 OK   #状态码
Content-Type: text/html;charset=utf-8  # 响应头部

<h2>骑士计划</h2>  # 响应体

 

Day46 Django的基本使用、

请求方式: get(查)与post请求(增)

  • GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditBook?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的请求体中.
  • GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制。

URL的组成部分

Day46 Django的基本使用、

1.Django简介

 1、MVC与MTV模型

 MVC模型

        Web服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的、

松耦合的方式连接在一起,模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求,其示意图如下所示:

Day46 Django的基本使用、

 

 MTV模型 

Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django的MTV分别是指:

        • M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM)。
        • T 代表模板 (Template):负责如何把页面展示给用户(html)。
        • V 代表视图(View):   负责业务逻辑,并在适当时候调用Model和Template。

        除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template,

MTV的响应模式如下所示:

 

Day46 Django的基本使用、

 一般是用户通过浏览器向我们的服务器发起一个请求(request),这个请求回去访问视图函数,(如果不涉及到数据调用,那么这个时候视图函数返回一个模板也就是一个网页给用户),

视图函数调用模型,模型去数据库查找数据,然后逐级返回,视图函数把返回的数据填充到模板中空格中,最后返回网页给用户。

2.Django下载与基本命令

2.1命令模式就行安装
注意:如果指定在django后面指定了版本的话就是下载对应的django版本,如果不指定会默认最新的版本就行下载。
方式一:pip3 install django      # 没有参数,默认下载最新版本
方式二:pip3 install django==1.11.x    # 指定Django的下载版本

当下载速度慢时,可以加上参数 
pip3 install django -i http://pypi.douban.com/simple/ 

 

2.2 pycharm就行安装

file ---> settings ----> project 解释器 ---> 点击+ ----> 输入Django ---> install(如果选择版本时,选择CheckBox,选择指定版本)
小结:可以就行版本的选择

 

 2.3 Django项目

2.3.1创建项目不包含app的创建

创建项目(没有包含app的创建)

方式一: 

使用命令行就行安装:不管是建立django基本模板还是建立app都需要在setting 里面就行配置文件所以最好使用pycharm直接创建省去麻烦

django-admin startproject 项目名称

 

小结:最原始的django模板文件。
Day46 Django的基本使用、

方式1中没有temprates文件夹于是查看settings文件发现temprates是没有配置的:

Day46 Django的基本使用、

'DIRS':[  ]根本没有配置!!!!!!!!!

方式2:在linux中使用pycharm就行创建

相比方式1直接用命令行创建 :

第一步:

Day46 Django的基本使用、

上面图片中的3是勾选不勾选只是from django.contrib import admin 这行代码是否被注释。仅此而已。

Day46 Django的基本使用、

 

第二步查看建立的具体内容:

Day46 Django的基本使用、

相比方式1的区别是:

1.多了一个templates的文件夹

2.方式二中给我们配置一一个路径,在使用templates(模板)的时候,由于是使用pycharm创建的于是系统已经帮我们配置了,而方式1中都没有这个文件更不要谈配置了。

配置的关于templates东西如下:

.Day46 Django的基本使用、

2.3.2 创建app在2.3.1的基础上就行再创建一个app01)

方式一:使用命令行:(基于上面的mysite2创建app001)

python3 manage.py startapp app名称

Day46 Django的基本使用、

我们会发现:创建app001的地方都没有配置:如下:

Day46 Django的基本使用、

但是建立mysite2的时候,是使用pycharm创建的,即是templates是系统就行配置了的。

如果使用最上面的mysite(使用命令行就行创建的),由于都没有tempaltes,更别说配置了。

mysite2中的templates中的配置是:

Day46 Django的基本使用、

 

方式二:(基于上面的mysite3创建app01)

Day46 Django的基本使用、

Day46 Django的基本使用、

 

 小结:使用pycharm创建的app01和使用命令行创建的app01的却别是

方式二系统就行了配置:方式一没有,配置文件如下:

Day46 Django的基本使用、

 

1.综合:2.3.1和2.3.2 如果想和pycharm创建pycharm的Django一样的话,在setting中加入templates配置文件和app01中的配置文件即可。
2.一般不推荐使用命令行就行创建Django文件。
3.在使用命令行在2.3.1的基础上就行创建app01的时候需要在mysite2根目录文件夹下面就行创建。
下图可以看出:

Day46 Django的基本使用、

Day46 Django的基本使用、

再次提醒: 通过pycharm创建的,不用自己在settings里配置,但是,通过命令行的,一定手动,进行配置,否则,应用无法生效.

注册app:
在settings.py里的INSTALLED_APPS列表中,添加注册app。
有两种方法:
INSTALLED_APPS = [..., "app01', ...]
INSTALLED_APPS = [..., "app01.apps.App01Config', ...] # 推荐这种写法

 2.4 启动Django项目

1.命令行

python3 manage.py runserver      # 127.0.0.1:8000
python manage.py runserver 80             # 127.0.0.1:80
python manage.py runserver 0.0.0.0:8888   # 0.0.0.0:8888# 注意:要在manage.py同级目录执行命令

2.pycharm 启动

 方式1:命令行的启动:python3 manage.py runserver # 127.0.0.1:8000

方式2:pycharm 启动

点击右上角的绿色的三角按钮.

Day46 Django的基本使用、

如需更改配置信息,请下拉选择edit,进行配置.

Day46 Django的基本使用、

可以就行端口的修改。

 3.自定义web框架

Web框架(Web framework)是一种开发框架,用来支持动态网站、网络应用和网络服务的开发。这大多数的web框架提供了一套开发和部署网站的方式,
也为web行为提供了一套通用的方法。web框架已经实现了很多功能,开发人员使用框架提供的方法并且完成自己的业务逻辑,就能快速开发web应用了。

 Day46 Django的基本使用、

  • 启动文件manage.py
 1 from wsgiref.simple_server import make_server
 2 from urls import *
 3 
 4 
 5 def application(environ, start_response):
 6     start_response('200 OK', [('Content-Type', 'text/html;charset=utf-8')])
 7     path = environ.get("PATH_INFO")
 8     func = None
 9     for item in urlpatterns:
10         if path == item[0]:
11             func = item[1]
12             break
13     if func:
14         ret = func(environ)
15     else:
16         ret = not_found(environ)
17 
18     return [ret]
19 
20 
21 if __name__ == '__main__':
22     httpd = make_server('', 8080, application)
23     print('Serving HTTP on port 8080...')
24     # 开始监听HTTP请求:
25     httpd.serve_forever()
  • urls.py

from views import *

urlpatterns = [
    ("/login/", login),
]
  • views.py保存视图函数
def login(environ):
    with open("templates/login.html", "rb") as f:
        data = f.read()
        return data


def not_found(environ):
    ret = b'<h1>404 not found.!!!</h1>'
    return ret
小结:一定要有返回值,不然只有请求 没有响应

 

  • templates模板目录(该目录下的login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<form action="http://127.0.0.1:8080/login/" method="post">
    <p>用户名:<input type="text" name="user"></p>
    <p>密码:<input type="password" name="pwd"></p>
    <input type="submit">
</form>
</body>
</html>

DIYWEB这个package就是一个web框架,下载这个web框架就可以快速实现一些简单的web功能。

4.基于Django实现的一个简单示例

  • url控制器

from django.contrib import admin
from django.urls import path
from app01 import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('timer/', views.timer),
]
  • 视图函数

from django.shortcuts import render

# Create your views here.


def timer(request):
    import datetime
    now_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    return render(request, "timer.html", {"now_time": now_time})
  • 模板文件(timer.html)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<h3>当前时间为:{{ now_time }}</h3>
</body>
</html>