web应用的简介、手撸web框架、 借助于wsgiref模块、Django框架的学习(主要文件介绍、应用、小白必会三板斧)

一、 MySQL数据库、前端

我们之前学习了数据库、前端、Python基础等三大部分,但是,他们三块的内容没有串在一起,也就没办法开发出一个完成的web项目出来,因此,我们通过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架构的,浏览器就是客户端、我们现在开发出一个服务端出来即可
你们就可以认为框架就是客户端的服务端
"""通过socket写出一个服务端出来"""

HTTP协议的相关知识
1. 四大特性
	基于请求和响应
    基于TCP协议之上的应用层协议
    无状态
    短连接
2. 请求数据格式
	请求首行(请求方式、协议版本号)
    请求头
    \r\n
    请求体
3. 响应数据格式
	响应首行(响应状态码)
    响应头
    \r\n
    响应体
4. 响应状态码
	1xx
    2xx
    3xx
    4xx
    5xx
    
如何做到在浏览器地址栏中写什么后缀就返回什么内容?

思路:
	1. 在后端肯定是要知道你在浏览器输入了什么后缀
    2. 判断是什么后缀就返回什么内容
    	conn.send(b'')
浏览器每次朝后端发起请求的时候,都会多一次:/favicon.ico
<link rel="shortcut icon" href="https://csdnimg.cn/public/favicon.ico" >


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

如何去优化以上问题

四、 借助于wsgiref模块(内置模块,直接使用)

from wsgiref.simple_server import make_server

解决了socket部分不用我们写了,在wsgiref模块里人家帮我们写了
它解决了并发问题 WSGIServer类------>wsgiref------>它能够解决的并发量不高----->本地使用wsgiref服务器--------------->代码上线之后,就不是有它----------->uwsgi服务器(它支持的并发量更高)


它帮我们解决了什么问题:
1. socket部分就不用写了,帮我们封装到了底层里面
2. 帮助我们处理了纯原生的HTTP格式的数据,把这些数据都封装到了大字典里了env
3. 它能够解决一定的并发问题,只不过是处理的并发不是特别高

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文件的
"""

以后我们要想增加一个后缀,只需要在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 startproject 项目名
        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、0203...

八、小白必会三板斧

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文件夹,要在配置文件注册################

你可能感兴趣的:(python01,django,django,学习,python,windows,pycharm)