首页 > 其他分享 >django 01 web框架推导与django介绍

django 01 web框架推导与django介绍

时间:2022-12-08 17:22:55浏览次数:48  
标签:web 01 py request server user django data

web框架推导

# 1.web框架是基于互联网的web服务端
     连接前端与数据库的中间介质
# 2.学习web框架必备知识:
     1.socket服务端代码
     2.HTTP协>>>:四大特性
# 3.web框架可以根据路由的不同请求不同内容
     路由指的是web开发中根据url分配到对应的处理程序
# 4.请求方式:
     get         朝服务端索要数据
     post        超服务端提交数据
# 5.手写的web框架缺点
    1.socket代码过于重复
    2.针对请求数据格式的处理复杂且重复
    3.针对不同路由的匹配太low了
# 6.代码
 import socket

 server = socket.socket()
 server.bind(('127.0.0.1',8080))
 server.listen(5)

 while True:
     sock, address = server.accept()
     data = sock.recv(1024)
     sock.send(b'HTTP/1.1 200 OK\r\n\r\nhello this is my wed')
     target_url = data.decode('utf8').split(' ')[1]
     if target_url == '/index':
         sock.send(b'index view')
     elif target_url == '/login':
         sock.send(b'login view')
     else:
         sock.send(b'404 error')


基于wsgiref模块改进

# 1.wsgiref模块介绍
    wsgiref模块内部封装了socket代码对请求数据的处理
# 2.模块的导入
    from wsgiref.simple_server import make_server
# 3.封装后的代码
from wsgiref.simple_server import make_server

def run(request, response):
    """
    :param request:  请求数据
    :param response: 响应数据
    :return: 返回给客户端的数据
    """
    print(request)
    response('200 OK', [])   # 固定代码无需掌握
    return [b'hello big baby']

if __name__ == '__main__':
    # 任何访问127.0.0.1:8080的请求都会给第三个参数加括号调用
    server = make_server('127.0.0.1', 8080, run)  
    server.serve_forever()     # 永久启动
# 4.缺点分析
    - 后续如果添加新的网页不便于管理,将代码进行封装优化按照软件开发目录规范管理    
    - 代码:
from wsgiref.simple_server import make_server

def index(request):
    return 'index'
def login(request):
    return 'login'
def error(request):
    return '404 not found'

urls = (
    ('/index',index),
    ('/login',login),
)
def run(request, response):
    """
    :param request:  请求数据
    :param response: 响应数据
    :return: 返回给客户端的数据
    """
    response('200 OK', [])  # 固定代码无需掌握
    target_path = request.get('PATH_INFO')

    func_name = None
    for url_tp in urls:   #   ('/index',index),
        if url_tp[0] == target_path:
            func_name = url_tp[1]    # 存储匹配到的函数吗,方便后续调用
            break    # 一旦匹配到内容直接结束for循环
    # for循环结束后需要判断func_name是否还为空,
    if func_name:
        res = func_name(request)
    else:
        res = error(request)
    return [res.encode('utf8')]    # 统一编码处理,函数返回字符串操作更简单

if __name__ == '__main__':
    # 任何访问127.0.0.1:8080的请求都会给第三个参数加括号调用
    server = make_server('127.0.0.1', 8080, run)
    server.serve_forever()     # 永久启动
# 5.软开管理规范
  - 根据py文件中功能的不同划分到不同的py文件(模块化)
    urls.py              对应关系
    views.py          功能函数
    start.py          启动文件
    templates文件夹   存储html

动静态网页

# 1.动态网页
   页面上的数据是动态获取的,来自后端传入
# 2.静态网页
   页面的数据是死的,需要修改源码才能修改数据
# 3.通过后端代码实现前端展示后端所写内容
   1.通过文件读写,在前端设置字符串类型,在后端将字符串进行替换
   2.将字典传递给页面内容,在页面上通过jinja2模块模板语法对其进行操作

jinja2模板语法

# 1.jinja2模块下载
     pip3 install jinja2   
# 2.使用jinja2实现后端字典数据传递给前端,并且拿到其中一个键或值
  - 后端代码:
  from jinja2 import Template

  def get_dict(request):
      user_dict = {'id': 1, 'name': 'tom', 'age': 18, 'hobby': ['ring', 'run']}
      with open(r'templates/my01.html','r',encoding='utf8') as f:
          data = f.read()
      temp =Template(data)
      res = temp.render(data=user_dict) # 将字典传递给html页面,页面通过data就能获取
      return res
  - 前端html内的:
    <p>{{ data }}}</p>
    
# 3.jinja2模板语法(前端操作后端)
  - 1.字典取值(四种方式)
<h1>{{ data }}</h1>
<h1>{{ data['name'] }}</h1>
<h1>{{ data.get('pwd') }}</h1>
<h1>{{ data.hobby }}</h1> 
2.数据库表单展示
{% for user in user_data %}
  <tr>
      <td>{{ user.id }}</td>
      <td>{{ user.name }}</td>
      <td>{{ user.age }}</td>
  </tr>
{% endfor %}

前后端与数据库联动

# 步骤 
  1.前端浏览器访问get_user 
  2.后端连接数据库查询use表中所有的数据 
  3.后端将数据传递到某个html页面
  4.前端弄好样式,再发送给浏览器展示
{% for user_dict in user_data_list %}
    <tr>
        <td>{{ user_dict.id }}</td>
        <td>{{ user_dict.name }}</td>
        <td>{{ user_dict.age }}</td>
    </tr>
{% endfor %}

python主流web框架简介

# 1.django框架
    大而全 自身携带的功能非常的多
  缺陷:开发小项目的时候使用该框架有点笨重(大材小用)

# 2.flask框架
    小而精,自身携带的功能非常的少,依赖于第三方模块
  缺陷:受限于第三方模块的开发

# 3.tornado框架
    异步非阻塞框架 该框架快到可以作为游戏服务器
  缺陷:上手难度是三者最高的

# 4.fastapi框架、sanic框架、...
    最近流行的

django简介

# 1.版本问题
  1.X:同步        1.11
  2.X:同步        2.2
  3.X:异步        3.2
     """无论使用什么版本都可以 区别不大"""

# 2.启动注意事项
  - 1.计算机名称尽量不要有中文
  - 2.项目中所有的py文件名尽量不要用中文
  - 3.不同版本的python解释器配合不同版本的django,会有一些报错
     """仔细查找一下报错信息,里面会提示你是哪个py文件里面的代码出错,找到那一行代码,把逗号删除即可"""
  - 4.一个pycharm窗口只允许有一个项目 不要做项目的嵌套

django使用

# 1.下载
    pip3 install django                   默认最新版
    pip3 install django==版本号            指定版本
    pip3 install django==2.2.22
          pip下载模块会自动解决依赖问题(会把关联需要用到的模块一起下了)

# 2.验证django是否下载成功
    cmd终端输入django-admin

# 3.cmd命令操作
    - 1.创建django项目
        django-admin startproject 项目名
    - 2.启动django项目
        1.先切换到项目目录下        cd 项目名
        2.执行启动目录             python38 manage.py runserver ip:port
                                     #  ip:port 本机可不写
    - 3.访问django服务端
        浏览器直接访问     
    - 4.创建app应用
        python38 manage.py startapp 应用名
        """
           django框架类似于是一个空壳子 给你提供所需的资源,至于到底要写哪些功能 需要通过创建app来划分
        eg:django初始项目可以看成是一所大学,app就相当于是大学里面的各个学院
        """     
# 4.pycharm操作(new project>>>django(鼠标控制))
     在启动django项目的时候,一定要确保一个端口只有一个项目。

# 5.命令行与pycharm操作的区别
     - 1.命令行不会自动创建templates文件夹
     - 2.命令行不会在配置文件编写关于templates文件夹的配置
         """'DIRS': [os.path.join(BASE_DIR, 'templates')]"""
     - 3.pycharm自动创建的第一个应用会自动注册到配置文件中
     - 4.针对db.sqlite3文件不用去在乎它有没有创建 只要运行了django会自动出来

django目录结构

# 1. 项目同名文件夹
      1. __init__.py              很少用 主要做一些冷门配置
      2. settings.py              项目配置文件
      3. urls.py                  对应关系(目前简单的理解:网址后缀跟函数名)
      4. wsgi.py                  django服务 基本不用
      5. manage.py                django入口文件
# 2. templates文件夹               存储项目所需的html文件
# 3. 应用名文件夹(可以有多个)
      1. migrations文件夹          orm相关(数据库打交道的记录)
      2.__init__.py               很少用主要做一些冷门配置
      3.admin.py                  django自带的后台管理
      4.apps.py                   创建应用之后用于应用的注册
      5.models.py                 存储与数据库表相关的类
      6.tests.py                  自带的测试文件
      7.views.py                  存储业务相关的逻辑代码(函数、类)
# 4.db.sqlite3                    自带的小型数据库

# 5.重要知识
urls.py           路由层
views.py          视图层
templates         模板层
models.py         模型层
# 6.导入方式
from django.template import Template, TemplateDoesNotExist  
   """django一般会自己创建该模块,建议缺什么补什么"""

django三板斧

# 1.导入
from django.shortcuts import render,HttpResponse,redirect

"""
HttpResponse          返回字符串类型的数据
render                返回html页面并且支持传值
redirect              重定向
"""

 

标签:web,01,py,request,server,user,django,data
From: https://www.cnblogs.com/juzijunjun/p/16966658.html

相关文章

  • [附源码]Python计算机毕业设计Django汽车租赁管理系统
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • vs2017中解决“调试模式下无法修改代码”的问题
    …不是在启用“编辑并继续”的情况下编译的。请确保使用程序数据库的“编辑并继续(/ZI)”选项编译此文件。相信在编程中你也会遇到这种问题,不要慌,这篇博客将帮你彻底解决......
  • S/MIME 101:使用 S/MIME 轻松实现 GDPR 合规
    自GDPR生效以来,加密包含敏感个人数据的电子邮件已被广泛认为是企业运营的最佳实践。这应该不足为奇——欧洲的电子邮件与美国的电子邮件具有相同的漏洞,未加密的电子邮件......
  • buuoj-[HDCTF2019]Maze
    1.winexe32bitupx1使用脱壳工具这一段是红的,是ida没有为其创建函数堆栈报错的问题,其上一条命令就是常规的动态运算反调试,40102E+1=40102F,在2F处重新生成代码即......
  • 框架第一课---纯手撸web框架,基于wsgiref模块,代码封装优化,动静态网页,jinja2模板语法,dja
    今日内容概要纯手撸web框架基于wsgiref模块代码封装优化动静态网页jinja2模板语法python主流web框架django框架简介django基本操作命令django小白必会三板斧......
  • cookie、session、web storage
    cookie与session的区别首先,使用cookie和session的目的都是为了跟踪记录用户状态,因为http协议是无状态的协议,而某些场景服务端需要记录用户的状态,如购物车,需要来识别具体的......
  • Centos7部署kubernetes中部署dashboard可视化Web 界面
    kubernetes官方提供的可视化界面,你可以使用Dashboard获取运行在集群中的应用的概览信息,也可以创建或者修改Kubernetes资源(如Deployment,Job,DaemonSet等等)。例如,你可以......
  • vs2017 vs2019秘钥
    VS2017专业版和企业版激活密钥需要的请自取~Enterprise:NJVYC-BMHX2-G77MM-4XJMR-6Q8QFProfessional:KBJFW-NXHK6-W4WJM-CRMQB-G3CDH Visual Studio 2019 Enterprise企......
  • 301. 任务安排2
    题目链接301.任务安排2有\(N\)个任务排成一个序列在一台机器上等待执行,它们的顺序不得改变。机器会把这\(N\)个任务分成若干批,每一批包含连续的若干个任务。从时......
  • CSS滚动条样式修改::-webkit-scrollbar
    修改滚动条样式通过伪元素::-webkit-scrollbar;::-webkit-scrollbar-CSS(层叠样式表)|MDN(mozilla.org):-webkit-scrollbar 仅在基于 Blink 或 WebKit 的浏览器,Bli......