Django基础介绍

web应用简介

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

1.web应用程序是什么

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

2.应用程序又两种模式c/s、b/s

  Django就是开发b/s程序的,所依,我们就认为浏览器是客户端,Django框架就是服务端

3.web应用程序的优点

  1.只需要一个浏览器即可

  2.节省资源空间

  3.不需要跟新,服务端更新,客户端也会更新

  4.可以跨平台使用

4.web应用缺点

  一旦web服务端宕机,直接影响客户端正常运行

 

什么是web框架:框架的意思就是别人提前写好的,我们只需要按照人家的要求在固定的位置写固定的代码

 

自己写一个web框架(推到框架的演变、代码无需掌握、重点看思路)

 web应用程序主要就是B/S架构的,浏览器就是客户端、我们现在开发出一个服务端出来即可

http协议相关知识点

1. 四大特性
  基于请求和响应
  基于TCP协议之上的应用层协议
  无状态
   短连接
2. 请求数据格式
  请求首行(请求方式、协议版本号)
   请求头
   \r\n
   请求体
3. 响应数据格式
  响应首行(响应状态码)
   响应头
  \r\n
  响应体
4. 响应状态码
  1xx
  2xx
  3xx
  4xx
  5xx

socket模块写出服务端

原始版服务端:用浏览器无法正常运作

复制代码
import socket

sever = socket.socket()
sever.bind(('127.0.0.1', 8000))
sever.listen(5)
while True:
    sock, addr = sever.accept()
    data = sock.recv(1024)
    print(data.decode())
sock.send(data) sock.close()
复制代码

第一次改进:客户端接受服务端发来的消息

复制代码
import socket

sever = socket.socket()
sever.bind(('127.0.0.1', 8000))
sever.listen(5)
while True:
    sock, addr = sever.accept()
    data = sock.recv(1024)
    print(data.decode())
  sock.send(b‘HTTP/1.1 200 ok \r\n\r\n ’)# 符合浏览器http协议格式,运用的tcp协议的流式协议
    sock.send(data)
    sock.close()
复制代码

第二次改进:在浏览器地址栏中写什么后缀就返回什么内容

思路:

  1. 在后端肯定是要知道你在浏览器输入了什么后缀
  2. 判断是什么后缀就返回什么内容

复制代码
import socket

sever = socket.socket()
sever.bind(('127.0.0.1', 8001))
sever.listen(5)
while True:
    sock, addr = sever.accept()
    data = sock.recv(1024)
    sock.send(b'HTTP / 1.1 200 ok \r\n\r\n')
    print(data.decode('utf8'))
    # 把字节类型转为字符串
    data_str = data.decode('utf8')
    # 进行空格切分把字符串转为列表显示
    data_list = data_str.split(' ')
    # 索引取出后缀名
    name_extension = data_list[1]
    # 做判断
    if name_extension == '/index':
        sock.send(b'index')
    elif name_extension == '/login':
        sock.send(b'login')
    else:
        sock.send(b'404 error')
    sock.close()
复制代码

存在一些问题:

  1. socket部分我们每次都要书写(要写重复代码)
  2. 我们需要自己来处理HTTP格式的数据,自己做切分,自己来取值等比较麻烦
  3. 并发问题没有解决

如何解决这些问题:借助于wsgiref模块

 

借助于wsgiref模块(内置模块)

解决了socket部分不用我们写,程序员已经写好放在wsgiref模块中
它解决了并发问题 WSGIServer类------>wsgiref------>它能够解决的并发量不高----->本地使用wsgiref服务器--------------->代码上线之后,就不是由它----------->uwsgi服务器(它支持的并发量更高)

复制代码
def run(env, response):
    """
    :param env: 客户端每次发起请求的时候,所携带的数据都在这个里面,就类似属于是request
    :param response: 是后端给浏览器返回的数据
    :return: 返回给浏览器查看的
    """
    print(env)  # 把HTTP格式的数据都封装到了大字典里去了
    response("200 OK", [])
    # 我们取到当前的后缀内容
    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__':
    server = make_server(host='127.0.0.1', port=8000, app=run)
    """
        这句话写完就会实时监听127.0.0.1:8000这个地址
        只要有客户端来访问这个地址,那么,我服务端就能够接收到客户端的请求, 就类似于是我们的socket端
        
        app=run:只要有客户度发过去请求,那么就会把处理的请求交给run这个函数来处理,run是个函数名(在django中用的就是函数名)
        
        后面你要学的flask框架这个地方写的是对象,而不是函数名
        obj()-------------->会触发类的__call__方法--------->flask框架的启动代码就在__call__里面写着的,是入口
    """
    # 启动服务端
    server.serve_forever()
复制代码

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

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

 Django框架的学习

Django是Python中使用最多的一个主流框架!

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
1. 安装django
  pip install django==1.11
django版本要和解释器的版本要匹配:
  django2.X版本------------>解释器的版本最后3.6以上

 如何验证django是否安装成功
  在cmd中输入:django-admin------>如果有输出内容就说明安装成功

2.创建项目

  1 命令行创建

  你可以先切换路径,切换到你想把django项目放到的路径里
    django-admin startpeoject 项目名
    django-admin startproject myfirst_dj
  2 pycharm创建
    File----->New Project ----->django

3. 如何启动项目
  1. 命令行启动
    先把路径切到manage.py所在的路径
    python3 manage.py runserver
    项目启动起来之后,会监听:http://127.0.0.1:8000/
    默认端口号是:8000
  如何修改端口号:
    python3 manage.py runserver 127.0.0.1 8001

  2. pycharm启动
    点击绿色按钮
    访问项目: http://127.0.0.1:8000/

4. Next, start your first app by running python manage.py startapp [app_label].

 如何创建应用
  1. 命令行创建
    python manage.py startapp [app_label].
    python manage.py startapp app01.
  2. pycharm创建

当你把应用创建出来之后,紧接着要做的一件事情就是:注册应用
在配置文件中注册应用,这个应用才生效

复制代码
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01.apps.App01Config',  # 全称
    'app01',  # 简称
]
复制代码

主要文件介绍

复制代码
myfirst_dj        # 项目名称
    app01        # 应用名称
        migrations    # 这个是用来存储数据库迁移记录
        __init__.py
        admin.py    # 跟后台项目注册等相关的
        apps.py        # 跟一些注册相关
        models.py    # 跟数据库打交道的 模型层----->MTV模型
        tests.py     # 测试文件
        views.py    # 视图文件,写一些后端逻辑
myfirst_dj
    __init__.py
    settings.py        # 配置文件相关的
    urls.py            # 路由相关的
    wsgi.py            # 内部封装的wsgiref服务器,uwsgi服务器之后,这个文件就没用了uwsgi.py
    db.sqlite3        # Django自带的小型数据库
manage.py            # Django框架的入口文件
复制代码

应用

django主要开发的就是一款web应用!
Django框架类似于是一所大学(空壳子)

应用就是大学里面的二级学院(具备独立的功能模块)
 一个应用就是一个独立的功能模块
比如:
user
order
address
cart
 应用名一定要见名知意,但是我们教学为了方便,我都使用app01、02、03...

三板斧

复制代码
The view app01.views.index didn't return an HttpResponse object. It returned None instead.
return HttpResponse("OK")  # 返回字符串的
return render(request, 'index.html')  # 返回html文件的
return redirect('http://www.baidu.com') # 重定向

#自己创建的templates文件夹,要在配置文件注册
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'DIRS': [os.path.join(BASE_DIR, '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文件夹,要在配置文件注册
 
复制代码

 

posted @   Py玩家  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Blazor Hybrid适配到HarmonyOS系统
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
· 分享4款.NET开源、免费、实用的商城系统
点击右上角即可分享
微信分享提示