首页 > 其他分享 >django

django

时间:2023-04-20 19:00:18浏览次数:39  
标签:web 框架 后缀 创建 py django

目录

Web应用

# python的就业方向
1. web方向---------->就是通过浏览器访问的应用程序--------->做网站的-------->90%的工作都是web
2. 爬虫岗位--------->就是爬取数据的
3. 数据分析方向------->工作岗位不是很多
4. AI----------->没有工作经验的先不要去----------->数学--------->AutoGPT----->python写的
5. ...
# 机遇与挑战并行

# web方向
'''通过浏览器访问的应用程序!!!'''

1. 两种模式C/S、B/S
	B/S:browser---------------->server
2. Web应用程序的优点
	2.1 只需要有一个浏览器即可
    2.2 节省资源
    2.3 它们不需要更新,因为所有新的特性都在服务器上执行
3. Web应用程序的缺点
	# 特别依赖服务端程序的健壮性,言外之意就是一旦服务端宕机,客户端立马宕机.
4. Web框架
	# 框架就是别人写好的模板,我们只需要在模板中固定的位置书写代码即可
    # Django框架就是一款专门用来写web应用的框架

纯手撸web框架

1.web框架的本质
	理解1:连接前端与数据库的中间介质
	理解2:socket服务端
2.手写web框架
	1.编写socket服务端代码
 	2.浏览器访问响应无效>>>:HTTP协议
 	3.根据网址后缀的不同获取不同的页面内容
	4.想办法获取到用户输入的后缀>>>:请求数据
 	5.请求首行
    	GET /login HTTP/1.1
 		GET请求
        朝别人索要数据
  		POST请求
        朝别人提交数据
 	6.处理请求数据获取网址后缀
"""
1.socket代码过于重复
2.针对请求数据处理繁琐
3.后缀匹配逻辑过于LowB
"""
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()  # 启动服务端

jinja2模块

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

动静态网页

1. 静态网页
	# 只有页面,数据是写死的,比如html文件
    
2. 动态网页
	# 页面中得数据是从数据库中查询出来的
    
1.访问某个网址后缀 后端代码获取当前时间 并将该时间传到html文件上再返回给浏览器展示给用户看
	读取html内容(字符串类型) 然后利用字符串替换 最后再返回给浏览器
    
2.将字典传递给页面内容 并且在页面上还可以通过类似于后端的操作方式操作该数据
	模板语法>>>:jinja2模块

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

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
	# 特点:小而精(轻量级的框架),自身并没有多少的文件,它也一样可以做django能做的事
    它严重依赖第三方模块---------->不停的安装模块---------->所以,它比较依赖第三方
    # 当你在flask中安装的模块足够多的时候,也差不多类似于Django了

3. tornado
	# 特点:异步非阻塞,并且支持高并发
'''我们目前学习Django框架,后面在学一个flask框架,框架有很多,不必把所有的框架学一遍,因为框架之间大差不差,比如,我们学完Django之后,在去学flask,就简单很多,只需要学习与Django不同的地方'''

Django框架

1. 版本
	1.x  2.x 3.x(不学)
    # 我们以1.x为主,附带2.x的区别,1.x和2.x大部分是相同的,在drf中得学习,必须用2.x
2. 安装Django
	pip install django===1.11

# 以后我们自己装的第三方模块都在:site-packages文件夹下面
3. 如何验证django是否安装成功
	# 在cmd中,输入django-admin,看一些是否有反应,如果有反应就说明安装成功了.
4.运行django注意事项
	1.django项目中所有的文件名目录名不要出现中文
	2.计算机名称尽量也不要出现中文
 	3.一个pycharm尽量就是一个完整的项目(不要嵌套 不要叠加)
	4.不同版本的python解释器与不同版本的django可能会出现小问题

如何使用

1. 创建项目
	# 1. 命令行创建
    	'''你可以提前切换文件夹路径,用来存储django框架的文件位置'''
    	django-admin startproject 项目名
        django-admin startproject myfirst
    # 2. pycharm创建
    	
2. 启动django项目
	 # 1. cmd启动
    	先切换路径到manage.py这一层下面
        python3 manage.py runserver # 默认启动在本地电脑上
     # 2. pycharm启动
    	在上边导航栏中点击绿色按钮启动
"""Next, start your first app by running python manage.py startapp [app_label]."""
3. 创建应用
	"""
		Django框架就是一款专门用来开发web应用的
		django这个框架类类似于是一所大学(空壳)
		应用相当于是一所大学里面的二级学院
		所以,应用是可以有多个的
		eg:我们使用django开发一个淘宝出来
			用户相关的功能----------->user
			订单相关的功能------------>order
			客服相关的功能------------>kefu
			发货相关的功能------------>fahuo
			...
		每一个应用就是一个独立的功能
	"""
    # 每一个django项目至少要有一个应用!!!
 4. 如何创建应用
	# 1. cmd创建
    ********************************************************************
                python3 manage.py startapp 应用名
                python3 manage.py startapp app01
    ********************************************************************
    
    '''
    	应用名都应该做到见名知意:
    		user
    		order
    		course
    		...
   		为了方便教学,我们统一使用app01/02/03/04...
   		
    '''
    # 2. pycharm创建应用
    	新建项目的时候,一块创建应用
    # 2.1
    	Tools
        	run manage.py task
            		# 在这个里面命令前面的python3 manage.py省略不写
5. 当应用创建出来之后,第一件事先去做:
# 去配置文件setting.py中去注册应用,以后每创建出来一个应用,都要去这里面去注册,如果不注册,你创建出来的应用,不生效.
********************************************************************************
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        # 'app01.apps.App01Config', # 注册应用,全称
        'app01', 

    ]
************************************************************************************

命令行创建和pycharm创建的区别

1. 命令行创建的项目没有templates文件夹
	# 我们自己手动创建一个文件夹
2. 配置文件中:
	TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [], # 默认没有东西
    },
]


2. pycharm创建的项目会自动创建templates文件夹
配置文件中:
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')] # pycharm创建出来的有东西
    }
# 在配置文件中统一改成:
    	'DIRS': [os.path.join(BASE_DIR, 'templates')]

主要文件介绍

myfirst			# 项目名称
	app01		# 应用名称
        migrations # 它是数据库迁移记录----------->跟数据库相关的时候才会用到
        __init__.py
        admin.py  # 跟后台相关的
        apps.py   # 跟注册一些东西相关的
        models.py # 这个是跟数据库相关的文件(重要)
        tests.py  # 这个是测试文件
        views.py  # 视图函数----------->主要写一些功能逻辑
	app02
myfirst
	__init__.py
    settings.py		# django框架的配置文件
    urls.py			# 路由文件:后缀和视图函数的对应关系
    wsgi.py			# 是一个服务器------->wsgiref(支持的并发量小)----------->uwsgi服务器----->支持的并发量高
db.sqlite3		# django自带的数据库,方便我们测试使用
manage.py        # 这个是django框架的启动文件,入口文件

django小白必会三板斧

from django.shortcuts import render,HttpResponse,redirect

HttpResponse		 返回字符串类型的数据

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

redirect			重定向

def func(request):
    print('from func')
    # return HttpResponse("ok!!!") # 里面写的都是字符串
    # return render(request,'index.html') # 加载html文件
    # return redirect('http://www.baidu.com')  # 重定向
    return redirect('/home/')  # 重定向

标签:web,框架,后缀,创建,py,django
From: https://www.cnblogs.com/whxx/p/17337976.html

相关文章

  • django中开启事务,GEO地理位置信息、持久化方案、主从复制原理和方案、哨兵高可用、集
    django中开启事务#django中如何开启事务全局开启:每个http请求都在一个事务中DATABASES={'default':{'ENGINE':'django.db.backends.mysql','NAME':'lqz','HOST'......
  • 编写你的第一个 Django 应用程序,第6部分
    本教程从教程5停止的地方开始。我们已经构建了一个经过测试的网络投票应用程序,现在我们将添加一个样式表和一个图像。除了服务器生成的HTML之外,Web应用程序通常需要提供呈现完整网页所需的其他文件(例如图像、JavaScript或CSS)。在Django中,我们将这些文件称为“静态文件”......
  • 编写你的第一个 Django 应用程序,第5部分
    本教程从教程4停止的地方开始。我们已经构建了一个网络投票应用程序,现在我们将为其创建一些自动化测试。一、自动化测试简介1.什么是自动化测试?测试是检查代码操作的例程。测试在不同级别运行。一些测试可能适用于微小的细节(特定的模型方法是否按预期返回值?),而其他测试则检查......
  • Django笔记九之model查询filter、exclude、annotate、order_by
    本文首发于公众号:Hunter后端原文链接:Django笔记九之model查询filter、exclude、annotate、order_by在接下来四五篇笔记中,将介绍model查询方法的各个细节,为我们的查询操作提供各种便利。本篇笔记将介绍惰性查找、filter、exclude、annotate等方法,目录如下:惰性查找filtere......
  • #yyds干货盘点#详解Django基础
    一:创建项目使用django-admin命令构建项目django-adminstartprojectHelloWorld如上使用django构建了一个HelloWorld项目二:项目结构我们可以看到HelloWorld项目结构如下|--HelloWorld||--__init__.py||--settings.py||--urls.py|`--wsgi.py`--manage.p......
  • 编写你的第一个 Django 应用程序,第4部分
    本教程从教程3 停止的地方开始。我们是继续民意调查应用程序,并将专注于表单处理和减少我们的代码。一、编写最小表单让我们更新上一个教程的投票详细信息模板(“polls/detail.html”),以便模板包含一个HTML <form>元素:<formaction="{%url'polls:vote'question.id%}"......
  • django查询一周内的数据,一月内的数据,一年内的数据
    首先是当前时间的确定,对于年月日,orm模型都有对应的方法直接查询,周是没有方法直接查询的,我是没有找到这个方法,只能间接的查询。cur_time=datetime.datetime.now()#如果数据库保存的是UTC时间,程序不会蹦但是会提示你这不是本地时间now_time_utc=datetime.datetime.utcnow......
  • Django框架模版渲染与过滤器使用
    前端模版使用过滤器,如时间格式化等'''都是在前端页面中使用'''#default 如果一个变量是false或者为空,使用给定的默认值。否则,使用变量的值。{{value|default:"nothing"}}#给value这个值设置一个默认值,如果value没有传值或者值为空的话就显示nothing#length 返回值的......
  • Django笔记二十四之数据库函数之比较和转换函数
    本文首发于公众号:Hunter后端原文链接:Django笔记二十四之数据库函数之比较和转换函数这一篇笔记开始介绍几种数据库函数,以下是几种函数及其作用Cast转换类型Coalesce优先取值Greatest返回较大值Nullif值相同返回None1、model准备这一篇笔记我们主要用到Author......
  • 编写你的第一个 Django 应用程序,第3部分
    本教程从教程2 停止的地方开始。我们是继续网络投票应用程序,并将专注于创建公众界面–“视图”。在我们的投票应用程序中,我们将有以下四个视图:问题“索引”页面–显示最新的几个问题。问题“详细信息”页面–显示问题文本,没有结果,但用表格投票。问题“结果”页面......