首页 > 其他分享 >Django

Django

时间:2022-12-08 20:45:42浏览次数:43  
标签:后缀 app py server user Django

目录

纯手撸web框架

  1. web框架的本质

    连接前端与数据库的中间的介质

    socket服务端

  2. 手写web框架

    编写socket服务端代码

    浏览器访问响应无效>>>: HTTP协议

    根据网址后缀的不同 获取不同的页面内容

    想办法获取到用户输入的后缀>>>:请求数据

    请求首行

    处理请求数据获取网址后缀

出现的问题:

socket代码过于重复

针对请求的数据处理繁琐

后缀匹配逻辑过于lower

import socket


server = socket.socket()  # TCP UDP
server.bind(('127.0.0.1', 8080))  # IP PORT
server.listen(5)  # 半连接池


while True:
    sock, address = server.accept()  # 等待连接
    data = sock.recv(1024)  # 字节(bytes)
    # print(data.decode('utf8'))  # 解码打印
    sock.send(b'HTTP/1.1 200 OK\r\n\r\n')
    data_str = data.decode('utf8')  # 先转换成字符串
    target_url = data_str.split(' ')[1]  # 按照空格切割字符串并取索引1对应的数据
    # print(target_url)  # /index /login /reg
    if target_url == '/index':
        # sock.send(b'index page')
        with open(r'myhtml01.html','rb') as f:
            sock.send(f.read())
    elif target_url == '/login':
        sock.send(b'login page')
    else:
        sock.send(b'home page!')

基于wsgiref模块

内置模块 很多web框架底层使用的模块
	功能1:封装了socket代码
 	功能2:处理了请求数据
1.固定代码启动服务端
2.查看处理之后的request大字典
3.根据不同的网址后缀返回不同的内容>>>:研究大字典键值对
4.立刻解决上述纯手撸的两个问题
5.针对最后一个问题代码如何优化

from wsgiref.simple_server import make_server


def run(request, response):
    """
    :param request: 请求相关数据
    :param response: 响应相关数据
    :return: 返回给客户端的真实数据
    """
    response('200 OK', [])  # 固定格式 不用管它
    # print(request)  是一个处理之后的大字典
    path_info = request.get('PATH_INFO')
    if path_info == '/index':
        return [b'index']
    elif path_info == '/login':
        return [b'login']
    return [b'hello wsgiref module']


if __name__ == '__main__':
    server = make_server('127.0.0.1', 8080, run)  # 实时监听127.0.0.1:8080 一旦有请求过来自动给第三个参数加括号并传参数调用
    server.serve_forever()  # 启动服务端

代码封装优化

1.网址后缀的匹配问题
2.每个后缀匹配成功后执行的代码有多有少
	面条版	函数版	模块版
3.将分支的代码封装成一个个函数
4.将网址后缀与函数名做对应关系
5.获取网址后缀循环匹配
6.如果想新增功能只需要先写函数再添加一个对应关系即可
7.根据不同的功能拆分成不同的py文件
	views.py		存储核心业务逻辑(功能函数)
 	urls.py			存储网址后缀与函数名对应关系
 	templates目录	   存储html页面文件
8.为了使函数体代码中业务逻辑有更多的数据可用
	将request大字典转手传给这个函数(可用不用但是不能没有)

jinjia2模块

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>

前端、后端、数据库三者联动

1.前端浏览器访问get_user 后端连接数据库查询use表中所有的数据 传递到某个html页面 弄弄好样式 再发送给浏览器展示

{% 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:异步非阻塞 速度极快效率极快甚至可以充当游戏服务端

ps:sanic、fastapi...

Django简介

  1. 版本问题

django1.X:同步		1.11
django2.X:同步		2.2
django3.X:支持异步    3.2
django4.X:支持异步	   4.2
ps:版本之间的差异其实不大 主要是添加了额外的功能
  1. 运行Django注意事项

  2. Django项目中所有的文件名目录名不要出现中文

  3. 计算机名称尽量也不要出现中文

  4. 一个pycharm尽量就是一个完整的项目(不要出现嵌套不要叠加)

  5. 不同版本的python解释器与不同版本的Django可能会出现小问题

Django基本使用

1.下载

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

2.验证

查看是否下载成功:命令行输入django-admin

3.常见命令

  1. 创建Django项目
django-admin startproject 项目名
  1. 启动Django项目
cd 项目名	# 切换到盘符的对应路径
python38 manage.py runserver ip:port

4.pycharm自动创建Django项目

会自动创建template文件夹 但是配置文件中可能会出现报错

os.path.join(BASE_DIR, 'templates')

Django app的概念

Django类似于是一所大学 app类似于大学里面的各个学院

Django里面的app类似于某一个具体的功能模块

如:

django里面的app类似于某个具体的功能模块
	user	app 所有用户相关的都写在user app下
 	goods	app 所有商品相关的都写在goods app下

命令行创建应用

python38 manage.py startapp 应用名

pycharm创建应用

新建Django项目可以默认创建一个 并且自动在配置文件中注册

后期在pycharm中里面提供的的terminal手动创建的app一定要去settings.py中注册
INSTALLED_APPS = [
    	'app01.apps.App01Config',
		'app02'
	]

偷懒创建应用功能(建议不要掌握使用)

注意

在Django里所创建的应用一定在配置文件INSTALLED_APPS注册

注意Django的端口号不要出现重复冲突:命令行使用了Django的端口号

与pycharm里的使用的端口一样就重复产生冲突导致项目无法启动

Django主要目录结构

Django项目目录名

Django项目同名的目录名:

应用目录:

文件名 作用
migrations目录 存储数据库相关记录
admin.py django内置的admin后台管理功能
apps.py 注册app相关
models.py 与数据库打交道的(非常重要)
tests.py 测试文件
views.py 存储功能函数(不严谨)
templates目录 存储html文件(命令行不会自动创建 pycharm会)配置文件中还需要配置路径[os.path.join(BASE_DIR,'templates'),]
"""
	网址后缀			路由
	函数				 视图函数
	类				  视图类
重要名词讲解
	urls.py				 路由层	
	views.py			 视图层
	models.py			 模型层
	templates			 模板层
"""

Django小白必会三板斧

from django.shortcuts import render,HttpResponse,redirect

HttpResponse		 返回字符串类型的数据

render				返回html页面并且支持传值

redirect			重定向

标签:后缀,app,py,server,user,Django
From: https://www.cnblogs.com/xiao-fu-zi/p/16967241.html

相关文章

  • Django框架
    Django框架相关推导模拟实现Django框架代码编写web框架web框架的本质从上图来看,web框架就是连接前端与数据库的中间介质,负责对数据进行处理,以主要的业务逻辑为支持编......
  • mac Django 连接mysql
    目录macdjango2.2正确连接mysql方式问题描述macdjango2.2正确连接mysql方式macDjango电脑连接mysql时候会出现一些错误,因为版本问题。以下操作Django2.2.22亲测有......
  • wsgiref模块,动静网页,jinja2模块,django
    目录纯手撸web框架基于wsgire模块代码封装优化动静网页jinja2模块前端、后端、数据库三者联动python主流web框架django简介django基本使用djangoapp的概念django主要目录......
  • Django框架
    Django框架Web框架推导Django框架简介......
  • web框架推导 wsgiref模块 jinja2模板语法 django框架简介 django基本操作
    目录纯手撸web框架web框架的本质手写web框架存在的问题基于wsgiref模块基本介绍推导流程代码封装优化总结动静态网页jinja2模块前端、后端、数据库三者联动推导流程总结pyt......
  • 纯手撸web框架、基于wsgiref模块、代码封装优化、动静态网页、jinja2模块、前端、后端
    目录推导流程纯手撸web框架基于wsgiref模块代码封装优化动静态网页jinja2模块前端、后端、数据库三者联动python主流web框架django简介django基本使用djangoapp的概念djan......
  • Django框架:1、手撸web框架、Django框架简介、安装与使用和小白必会三板斧
    Django框架目录Django框架一、Django推导流程1、纯手撸web框架2、基于wsgire模块3、代码封装优化4、动静态网页5、jinja2模块6、前端、后端、数据库三者联动二、python......
  • web框架、django基本使用
    今日内容总结web框架web框架的本质 理解1:连接前端与数据库的中间介质 理解2:socket服务端手写web框架 1.编写socket服务端代码 2.浏览器访问响应无效>>>:HTTP协......
  • django框架之基础学习
    目录纯手撸web框架基于wsgiref模块代码封装优化动静态网页jinja模板前端、后端、数据库三者联动python主流web框架Django简介Django基本使用djangoapp的概念django的主要......
  • django三板斧
    今日内容概要纯手撸web框架基于wsgiref模块代码封装优化动静态网页jinja2模板语法python主流web框架django框架简介django基本操作命令django小白必会三板斧今......