Django框架

发布时间 2024-01-02 11:49:12作者: Way*yy

框架

框架就是可以做到将前端、后端、数据库三者给融合到一起

web应用的简介

"""Django框架是一个专门来开发web项目的框架"""

1、web应用是什么?
	# web应用程序是一种可以通过web访问的应用程序,也就是说只需要一个浏览器即可,不需要其他的软件了
    
2、应用程序有C/S和B/S两种模式
	#Django就是开发B/S的应用程序,所以,我们就认为浏览器是我们的客户端,而Django框架就是我们的服务端
    
3、web应用程序的优缺点:
	# 优点
    	节省空间、不需要我们更新、只要服务器更新版本,就会影响客户端的版本,可以跨平台使用
    # 缺点
    	"""一旦web应用的服务器出现宕机,就会直接影响到客户端的访问"""
        
# 什么是web框架?
	框架:就是别人已经写好了的,将功能已经封装好的,我们只需要拿来用即可

纯手撸web框架

# web应用程序主要的就是B/S架构的,浏览器就是客户端,我们现在开发出一个服务端即可
# 现在可以认为框架就是客户端的服务端
"""通过socket写出来一个服务端"""
from socket import socket

sever = socket()  # 默认是TCP协议,三次握手四次挥手

sever.bind(("127.0.0.1", 8000))

sever.listen(3)

while True:
    sock, addr = sever.accept()

    sock.send(b'HTTP/1.1 200 OK\r\n\r\n')

    # 我们如何能做到输入什么路由就返回什么路由?
    data = sock.recv(1024)
    # 将接收到的数据进行解码
    sever_data = data.decode("utf8")
    # 对数据按照空格进行切分
    colink = sever_data.split(" ")

    # 开始判断是否为输入的数据
    if colink[1] == "/login":
        # 如果是则返回相同的路由
        sock.send(b"login")

    elif colink[1] == "/index":
        sock.send(b'index')
    else:
        sock.send(b"hello web")

    sock.close()

# 浏览器每次向后端发起请求的时候,都会多一个/favicon.ico
	这个是网页的log,要在前端页面中设置
    <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的重复代码问题
# WSGIServer可以解决一定大小的并发问题,而且内部也将socket的代码封装好了
# 而代码上线后我们会使用uwsgi服务器(他可以解决更高的并发量)
def run(env, response):
    """
    :param env: 客户端每次发送请求的时候,所携带的数据都在这个里面,就类似于是request
    :param response: 是后端给浏览器返回的数据
    :return: 返回给浏览器查看的数据
    """
    print(env)  # 将HTTP格式的数据都封装到了字典里面

    response("200 OK", [])

    # 取到我们想要的后缀内容
    current_path = env['PATH_INFO']

    if current_path == '/index':
        return [b"index"]
    elif current_path == '/login':
        return [b"login"]
    else:
        return [b"hello web,First meeting"]


if __name__ == '__main__':
    sever = make_server(host='127.0.0.1', port=8001, app=run)
    """
        这句话写完就会开始实时监听127.0.0.1:8000这个地址
        只要有客户端来访问这个地址,那么我服务端就能够接收到客户端的请求,就类似是我们的socket端
        app=run:只要游客户端发过来请求,就会把请求交给run这个函数处理
    """
    # 启动服务端
    sever.serve_forever()

    """
    views.py----------------->视图文件--------->主要就是写后端的逻辑的
    urls.py------------------>路由文件(后缀)---------->路由与视图函数的对应关系
    templates---------------->专门用来存储html文件的
    """

    # 以后我们要想增加一个后缀,只需要在urls.py中写一个路由和在views.py中写一个视图函数即可.

Django框架学习

Django框架是Python中的主流框架

Python中的主流框架:
	Django:
    	# 主要是来开发web项目的,因为功能比较全而多,所以比较笨重,小型项目一般不会使用
    Flask:
    	# 是一个轻量级的框架,它主要是依赖于第三方模块,模块库非常非常多
    tornado:
    	# 异步非阻塞,比较擅长解决高并发问题
        
Django版本问题:
	1.X(老项目)、2.X(新项目)、3.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以上

2.验证django是否安装成功
# 在cmd中输入:django-admin------>如果有输出内容就说明安装成功

3.创建项目
	# 1 命令行创建
    	"""你可以先切换路径,切换到你想把django项目放到的路径里"""
        django-admin startproject 项目名
        django-admin startproject myfirst_dj
    # 2 pycharm创建
    	File
        		New Project
            			django
                				...
4.启动项目
	1.命令行启动:
    		# 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/
                
5.Next, start your first app by running python manage.py startapp [app_label].
	"""创建应用"""
    1.命令行创建:
    	python manage.py startapp [app_label].
        python manage.py startapp 应用名称.
    2.pycharm创建
    	.......

        
# 当你把应用创建出来之后,紧接着要做的一件事情就是:注册应用
# 在配置文件中注册应用,这个应用才生效

***********************************************************************************
将应用名称添加到配置文件INSTALLED_APPS中
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 在创建Django文件的时候创建APP会自动注册应用
    'app01.apps.App01Config',  # 全称
    # 使用命令行创建的Django项目需要自己创建APP自己注册
    'APP名称',
]

命令行与pycharm创建的区别

# 1 命令行创建不会自动有templatew文件夹 需要你自己手动创建而pycharm会自动帮你创建并且还会自动在配置文件中配置对应的路径
# pycharm创建
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')]
]
# 命令行创建
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
]
"""
也就意味着你在用命令创建django项目的时候不单单需要创建templates文件夹还需要去配置文件中配置路径
'DIRS': [os.path.join(BASE_DIR, 'templates')]
"""

Django文件介绍

excess_jg:项目名称
    app_one:应用名称
    	migrations:存储数据迁移记录
        __init__.py:
        admin:跟后台项目注册相关的
        apps:跟一些注册相关的
        models:跟数据库打交道的 模型层----->MTV模型
        tests:测试文件
        views:视图文件,写一些后端逻辑
    migrations
    	__init__.py
        settings:配置文件相关的
        urls:路由相关的
        wsgi:内部封装的wsgiref服务器,使用uwsgi服务器之后,这个文件就没用了uwsgi.py
    	db.sqlite3:Django自带的小型数据库
    manage.py:Django的入口文件

Django应用

# django主要开发的就是一款web应用!
Django框架类似于是一所大学(空壳子)

应用就相当于大学里面的二级学院(具备独立的功能模块)
# 一个应用就是一个独立的模块

比如:
	user、order、address、cart......等等
    
"应用名一定要见名知意"

Django的三板斧

"""
	HttpResponse:
		返回的字符串类型的数据
		
	render:
		返回的是html文件
	
	redirect:
		重定向
		return redirect('https//www.baidu.com/')
		return redirect('/home/')
"""