首页 > 其他分享 >django框架

django框架

时间:2022-12-08 21:48:13浏览次数:46  
标签:web 框架 后缀 py django 页面

django框架

django框架前导

自己手写的原始版web框架(1.0)


问
    1.我们在自己编写web框架之前需要先弄清楚web框架的作用
    2.我们编写web框架时要弄清楚需要实现什么样的功能

答
    1.web框架的作用就是连接前端与数据库,web框架可以被看成是连接两者的中间介质,也可以简单的理解为socket服务端
    2.我们编写的web框架最基础的功能就是实现浏览器访问,且可以根据不同的网址后缀获取不同的页面内容
    
手写web框架思路
    1.先编写一个socket服务端
    2.浏览器此时直接访问是无效的,因为http协议的存在,所以我们需要在服务端中添加http协议
    3.浏览器直接访问成功,再进一步,根据网址后缀的不同获取不同的页面
    4.在服务端想办法获取用户输入的网址后缀(一般是在请求首行中)
        GET /index HTTP/1.1
        Host: 127.0.0.1:8080
        Connection: keep-alive
        sec-ch-ua: "Not?A_Brand";v="8", "Chromium";v="108", "Google Chrome";v="108"
        sec-ch-ua-mobile: ?0
        sec-ch-ua-platform: "Windows"
        Upgrade-Insecure-Requests: 1
        User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36
        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
        Sec-Fetch-Site: none
        Sec-Fetch-Mode: navigate
        Sec-Fetch-User: ?1
        Sec-Fetch-Dest: document
        Accept-Encoding: gzip, deflate, br
        Accept-Language: zh-CN,zh;q=0.9
    5.对请求数据进行处理获得网址后缀
  
纯手写的web框架可以实现最基本的功能,但是有几个问题
    1.socket代码过于重复
    2.请求数据的处理过于繁琐
    3.后缀匹配逻辑也比较繁琐

手撸框架进阶(基于wsgiref模块)(2.0)

wsgiref模块是一个内置模块,它是很多web框架底层使用的模块
它的作用就是
    1.封装了socket代码
    2.处理了请求数据

那么针对1,0版本的手写web框架出现的问题我们就可以很好的解决前两个问题
    1.启动服务端有固定的代码
    2.相关的请求数据会被自动处理成一个大字典request
    3.我们可以根据大字典的键值对来获取不同的网址后缀名,从而返回不同的页面内容
    
现在还剩下最后一个问题:后缀匹配逻辑如何处理

代码封装优化

可以根据我们之前写购物车和选课系统的模式将后缀匹配成功后执行的代码封装成不同的函数,网址后缀名与函数做一个对应关系
1.网址后缀名与功能函数做对应
2.功能函数中存放具体的业务代码
3.功能函数和对应关系放在不同的py文件中
    views.py        存放核心业务逻辑(功能函数)
    urls.py         存放网址后缀与函数名的对应关系
    templates       存放html页面文件
4.可以将request大字典顺手传给功能函数,让业务逻辑有更多的数据可用

动静态网页

动态网页就是页面数据来源于后端,后端给什么它就显示什么
静态网页则是页面数据直接写死要想改变只能在源文件中修改

jinja2模块

可以在html页面上通过类似于后端的操作方式来操作数据
pip3 install jinja2


from jinja2 import Template


def get_dict_func(request):
    user_dict = {'name': 'jason', 'age': 18, 'person_list': ['阿珍', '阿强', '阿香', '阿红']}
    with open(r'templates/get_dict_page.html', 'r', encoding='utf8') as f:
        data = f.read()
    temp_obj = Template(data)  # 将页面数据交给模板处理
    res = temp_obj.render({'d1': user_dict})  # 给页面传了一个 变量名是d1值是字典数据的数据
    return res

<p>{{ d1 }}</p>
<p>{{ d1.name }}</p>
<p>{{ d1['age'] }}</p>
<p>{{ d1.get('person_list') }}</p>

python主流web框架

1.django
    自身携带的功能组件非常多
2.flask
    自身携带的功能组件很少,但是它可以使用第三方模块
3.tornado
    异步非阻塞,速度极快效率极高

django基本使用

1.下载
    cmd下载
        pip38 install django 下载源      默认下载最新版
        pip38 install django==2.2.22 下载源     指定下载版本
    pycharm中下载
        File==>Settings==>Project:  ==>Python Interpreter  双击右边空白处搜索框中直接搜索即可,在这里可看见版本号
2.验证
    django-admin    有反应说明下载成功,或者去pycharm中查看
3.创建django项目
    django-admin startproject 项目名
4.启动django项目
    cd 项目名  # 进入项目目录
    python38 manage.py runserver 127.0.0.1:8080
    注意:
        这里启动django是可能会报错:[WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试。
        这是由于端口冲突导致的,换一个端口号就好了
5.pycharm创建django项目时会自动创建templates文件夹,但是配置文件中需要修改文件路径
    cmd创建的django项目没有templates文件夹,需要自己手动创建,而且吧配置文件需要自己配置一个路径

django app的概念

app即application,django是一个大的整体,app则是下面的具体的功能模块
app创建
    命令行创建
        python38 manage.py startapp 应用名
    pycharm创建
        新建django项目时可以默认创建一个,且自动注册,自己手动创建则是在Terminal中编写cmd命令创建
无论是cmd命令行创建的还是pycharm中命令创建的都需要去settings.py中注册
    INSTALLED_APPS = [
    	'app01.apps.App01Config',  # 完整写法
		'app02'  # 简写
	]

django主要目录结构

django项目目录名
    manage.py                入口文件
    templates目录            模板层(存储html文件)
    db.sqlite3文件           django自带的小型数据库(项目启动之后才会出现)
    django项目同名目录
        settings.py          配置文件
        urls.py              路由层(存储网址后缀与函数名对应关系)
        wsgi.py              wsgiref网关文件
    应用目录
        migrations           存储数据库相关记录
        admin.py             django内置的admin后台管理功能
        apps.py              注册app相关
        models.py            模型层(与数据库打交道的)
        tests.py             测试文件
        views.py             视图层(存储功能函数)
        
'''
网址后缀    ==>   路由
函数       ==>   视图函数
类         ==>   视图类
'''

小白三板斧

from django.shortcuts import render,HttpResponse,redirect

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

标签:web,框架,后缀,py,django,页面
From: https://www.cnblogs.com/zyg111/p/16967414.html

相关文章

  • Django教程
    Django简介什么是Django?是一个基于python的web框架,允许你快速的创建web应用程序,并为你提供非常多现成的组件来使用。历史版本:1.11版本2018年​......
  • 进入python的世界_day48_Django初始
    一、纯手撸web框架1.先搭服务端​ 1.因为浏览器就可以当成C\S开发架构的C客户端,我们先写一个简单的服务端importsocketserver=socket.socket()#这里括号不改任......
  • django框架(部分讲解)
    纯手撸web框架web框架的本质浏览器---web框架---数据库理解1:web框架连接前端与数据库的中间介质浏览器(客户端)--->web框架(服务端)理解2:web框架是一个socket服务......
  • django基础部分内容
    内容概要手撸web框架基于wsgiref模块django基础手撸web框架web框架'本质': 理解1.是连接前端与服务器的中间介质 理解2.socket服务端手写web框架1.编写socket......
  • Django框架的推导下载基本使用
    目录Django框架一、django框架的推导1.纯手写web框架2.基于wsgire模块3.代码封装优化4.jinja2模板语法5.前端后端数据库三者联动6.动静态页面二、django框架详细1.python......
  • django 下载使用教程 三板斧
    djangopython主流web框架#django 大而全自带的功能非常的多但是有时候会略显笨重类似于'航空母舰'#flask 小而精自带的功能非常的少但是第三方模块非常的多......
  • Django推导流程,Django模块的下载和基本使用、Django的应用和目录结构讲解、Django三板
    今日内容纯手撸web框架1.web框架的本质:理解1:连接前端与数据库的中间介质理解2:socket服务端2.手写web框架:1.编写socket服务端代码importsocketserver=sock......
  • 纯手撸web框架、基于wsgiref模块、代码封装优化、动静态网页、jinja2模块、前端、后端
    目录纯手撸web框架基于wsgiref模块代码封装优化动静态网页jinja2模块前端、后端、数据库三者联动python主流web框架django简介django基本使用djangoapp的概念django主要目......
  • Django
    目录纯手撸web框架基于wsgiref模块代码封装优化jinjia2模块前端、后端、数据库三者联动python主流web框架Django简介版本问题运行Django注意事项Django基本使用1.下载2.验......
  • 批量单元框架SpringBatch简介
    SpringBatch简介SpringBatch是一个轻量级的、完善的批处理框架,作为Spring体系中的一员,它拥有灵活、方便、生产可用的特点。在应对高效处理大量信息、定时处理大量数据等......