Django

发布时间 2023-07-26 17:36:06作者: 别管鱼油我了

web应用的简介

Django框架是一个专门用来开发 web项目的框架。

web应用是?

web应用程序是一种可以通过web访问的应用程序,也就是说只需要一个浏览器即可,不需要其他软件。

应用程序有两种模式C/S、B/S

Django就是开发B/S应用程序的,所以我们就认为浏览器是我们客户端,Django框架就是服务端。

web应用程序的优点

1、只需要一个浏览器即可,不需要安装其他应用软件。

2、节省用户的空间

3、他们不需要更新,是因为服务端只要一更新版本,会直接影响客户端的更新。

4、跨平台使用

web应用程序的缺点

一旦web应用程序的服务端宕机,直接影响客户端的正常访问。

 

web框架

web应用程序主要是B/S架构的,浏览器就是客户端,开发一个服务端即可。

用socket写出一个服务端

关于之前的HTTP协议复习知识:

1、四大特性

  基于请求和响应

  基于TCP协议之上的应用层协议

  无状态

  短链接

2、请求数据格式

  请求首行

  请求头

  /r/n

  请求体

3、响应数据格式

  响应首行

  响应头

  /r/n

  响应体

4、响应状态码

1xx、2xx、3xx、4xx、5xx

 

1、用socket连接客户端

import socket

sever = socket.socket()
sever.bind(('127.0.0.1',8000))
sever.listen(5)

while True:
    conn,addr = sever.accept()
    data = conn.recv(1024)
    print(data.decode('utf-8'))

    conn.send(b'HTTP/1.1 200 ok \r\n\r\n')
    conn.send(b'hihi')
    conn.close()

2、解决问题:在浏览器地址栏填什么后缀就返回什么

import socket

sever = socket.socket()
sever.bind(('127.0.0.1',8000))
sever.listen(5)

while True:
    conn,addr = sever.accept()
    data = conn.recv(1024)
    # print(data.decode('utf8'))
    res = data.decode('utf8')
    re = res.split(' ')
    print(re)
    conn.send(b'HTTP/1.1 200 ok \r\n\r\n')
    if re[1] == '/login':
        conn.send(b'login')
    elif re[1] == '/index':
        conn.send(b'index')
    else:
        conn.send(b'404 erro')


    conn.close()

但是上述方法存在问题:

1、socket部分我们每次都要书写,代码重复

2、我们需要自己处理http格式数据,自己切分,自己取值

3、并发问题没有解决

 

3、借助wsgiref模块解决问题

from wsgiref.simple_server import make_server

from wsgiref.simple_server import make_server

def run(env,response):
#     env就相当于后续的request,当客户端发起请求时,所携带的数据都在这里
#       response:是给后端返回数据
#         return:返回给浏览器查看
    print(env)  #这里是个大字典
    response('200 ok',[])
#     字典中的后缀名在PATH_INFO中
    current_path = env.get('PATH_INFO')
# 判断
    if current_path == '/index':
        return [b'index']
    elif current_path == '/login':
        return [b'login']
    else:
        return [b'404 error']



if __name__ == '__main__':
    sever = make_server(host='127.0.0.1',port=8000,app=run)
    #这句话是实时监听上面的地址,只要有客户访问这个地址,服务端就能接收到客户端的请求,就类似于我们socket前端
    # app=run:只要客户端发过去请求,那么就会把处理的请求交给run这个函数处理,run是个函数名(在django中用的就是函数名)
    # 在后续学的flask框架时,app的地方是对象,不是函数名,而对象加()调用的是类下的__call__方法
    # 启动服务端
    sever.serve_forever(0)

4、进一步封装

 视图:

 路由:

 

views.py----------------->视图文件--------->主要就是写后端的逻辑的
urls.py------------------>路由文件(后缀)---------->路由与视图函数的对应关系
templates---------------->专门用来存储html文件的
"""

# 以后我们要想增加一个后缀,只需要在urls.py中写一个路由和在views.py中写一个视图函数即可.

Django框架学习

python中的主流框架:

Django:
主要用来开发web项目的,它比较笨重,一般小型项目不怎么使用它,大而全
flask:
它是一个比较轻量级的框架,它主要依赖于第三方的模块,不断的安装第三方模块,小而精
tornado:
 异步非阻塞,解决高并发比较擅长
 这个框架学起来有点难度.

版本:

1.X(老项目) 2.X(新项目) 3.X(新版本)
1.x和2.x本质上差别不是很大,但是也有区别,我们讲1.x,附带讲2.x的区别

在drf中,都要使用2.x以上版本,drf这个框架要求django的版本必须是2.x以上

注意事项:

1. 你的项目名称和应用名称以及其他文件的名称都要使用英文的,坚决不能够使用中文的
2. 你的计算机名称最后都使用英文的
3. 一个pycharm窗口只打开一个django项目,不能够一个窗口打开很多个django项目

 

安装django