Django框架的学习,主要文件介绍,应用,小白必会三板斧

发布时间 2023-07-26 21:23:19作者: 毓见

今日内容详细

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服务器(它支持的并发量更高)

# 代码上线之后会使用 Nginx + uwsgi------------------>后续再将.

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 startpeoject 项目名
        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、02、03...

小白必会三板斧

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