路由层、有名无名分组、反向解析、路由分发、名称空间与python虚拟环境创建

上周内容回顾

  • 什么是ORM
# 1.对象映射关系
	类	》表
	对象	》记录
	属性	》字段值
    
# 2.如何来使用
class User(models.Model):
    # id int primary key auto_increment
    id = models.AutoField(primary_key=True)  # 如果表的主键名就是ID 则可以省略
    
    username = models.CharField(max_length=32, default=0, null-True)  # not null
    

# 3.数据的增删改查
    # 增
    # request.POST  =>  {'A':1, 'B':2, 'C':3}
    models.User.objects.create(username='ly', password=123)
    models.User.objects.create(**A)
    
    obj = models.User(username=123)
    obj.save()
    
    # 改
    models.User.objects.filter().update(username=123)
    
    obj = models.User.objects.filter(pk=1).first()  # 对象,不是queryset
    
    obj.username = 'aaa'
    obj.password = 'bbb'
    obj.save()
    
    # 删
    filter().delete()
    
    # 查
    # filter里面的条件是and关系
    obj = models.User.objects.filter()
    obj = models.User.objects.filter().filter().all()  # 返回的结果是queryset对象
    """因为 返回结果是queryset 就可以继续使用queryset提供的点方法"""
    
    
# 4.ORM创建外键关系
    01 一对一关系 外键字段建在使用频率高的一方
    models.OneToOneField(to='AuthorDetail', to_field='')
    
    02 一对多 外键字段建在多的一方
    models.ForeignKey(to='')
    
    03 多对多 外键建在第三张表 不需要我们手动创建
    authors = models.ManyToManyField(to='')

今日内容概要

  • Django 的请求生命周期流程图
  • 路由层
    • 无名有名分组
    • 反向代理
  • 路由分发
  • 名称空间
  • 虚拟环境演示

内容详细

1. Django的请求生周期流程图

# 帮助我们梳理django框架的执行顺序

image

2. 路由层

# 路由匹配 urls.py中
	# 在Django1.x中 创建新的项目后 先在配置文件settings中修改配置 再去启动项目:
"""
TEMPLATES = [
    {
'DIRS': [os.path.join(BASE_DIR, 'templates')]
"""
            
    # url属性中是正则匹配 匹配规则:从上到下只要正则表达式匹配成功,就不会往下匹配了
    # 在urls.py文件中写入:
"""
from app01 import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', views.test),  # 客户输入默认域名 就是访问首页
    url(r'^test/$', views.test),
    url(r'^testadd/$', views.testadd),
]
"""

    # 在app目录下的views.py文件中写入:
"""
from django.shortcuts import render, HttpResponse
# Create your views here.

def test(request):
    print('test')
    return HttpResponse('test')

def testadd(request):
    print('testadd')
    return HttpResponse('testadd')
"""


	# 补充
		对于Django自动补全/功能 如果不想要 也可以在settings.py文件中增加配置项:
			APPEND_SLASH = False  # 控制django是否自动加斜杠匹配
            
		get请求的传参方式:
			http://127.0.0.1:8000/test/?a=1
			http://127.0.0.1:8000/test/1

image

image

3. 无名分组和有名分组

# 无名分组
	# 在urls.py文件中写入:
		# 无名分组
		url(r'^test/(\d+)', views.test),  # 会把括号中匹配的数字当成 位置参数传给视图函数
        
	# 在app目录下的views.py文件中写入:
"""
from django.shortcuts import render, HttpResponse
# Create your views here.

def test(request, aaa):
    print(aaa)
    print('test')
    return HttpResponse('test')
"""
        

# 有名分组
	# 在urls.py文件中写入:
		# 有名分组
		url(r'^test/(?P<bbb>\d+)$', views.test),  # 会把括号中匹配的数字当成 关键字参数传给视图函数

	# 在app目录下的views.py文件中写入:
"""
from django.shortcuts import render, HttpResponse
# Create your views here.

def test(request, bbb):
    print(bbb)
    print('test')
    return HttpResponse('test')
"""

image

image

4. 反向解析

# 反向解析其实就是:
	通过一个路由别名 可以得到别名所在的这行路由的 完整地址
	路由是可以起别名的
    
'''以下都是直接访问原始域名:127.0.0.1:8000'''
# 1.后端反向解析
	# 在urls.py文件中写入:
"""
url(r'^$', views.home),  # 客户输入默认域名 就是访问首页
url(r'^v1/v2/v3/v4/v5/test/', views.test, name='test'),
"""

	# 在app目录下的views.py文件中写入:
"""
from django.shortcuts import HttpResponse, reverse
# Create your views here.

def home(request):
    # 后端反向解析
    print(reverse('test'))
    return HttpResponse('home')
"""

# 2.前端反向解析
	# 在urls.py文件中写入:
"""
url(r'^$', views.home),  # 客户输入默认域名 就是访问首页
url(r'^test', views.test, name='test'),
"""

	# 在app目录下的views.py文件中写入:
"""
from django.shortcuts import render, HttpResponse, reverse
# Create your views here.

def home(request):
    # 前端反向解析
    print(reverse('test'))
    return render(request, 'home.html')
"""

	# 新建home.HTML文件:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
    <a href="{% url 'test' %}">反向解析</a>
</body>
</html>


# 3.后端无名带参数的反向解析
	# 在urls.py文件中写入:
"""
url(r'^$', views.home),  # 客户输入默认域名 就是访问首页
url(r'^test/(\d+)', views.test, name='test'),
"""

	# 在app目录下的views.py文件中写入
"""
from django.shortcuts import render, HttpResponse, reverse
# Create your views here.

def home(request):
    # 后端反向解析
    print(reverse('test', args=(111, )))
    return HttpResponse('home')
"""


# 4.后端有名带参数的反向解析
	# 在urls.py文件中写入:
"""
url(r'^$', views.home),  # 客户输入默认域名 就是访问首页
url(r'^test/(?P<aaa>\d+)', views.test, name='test'),
"""

	# 在app目录下的views.py文件中写入
"""
from django.shortcuts import render, HttpResponse, reverse
# Create your views here.

def home(request):
    # 后端反向解析
    print(reverse('test', kwargs={'aaa': 1111}))
    return HttpResponse('home')
"""


# 5.前端无名带参数的反向解析
	# 在urls.py文件中写入:
"""
url(r'^$', views.home),  # 客户输入默认域名 就是访问首页
url(r'^test/(\d+)', views.test, name='test'),
"""

	# 在app目录下的views.py文件中写入
"""
from django.shortcuts import render, HttpResponse, reverse
# Create your views here.

def home(request):
    # 前端反向解析
    return render(request, 'home.html')
"""

	# home.HTML文件:
"""
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
    <a href="{% url 'test' 111 %}">反向解析</a>
</body>
</html>
"""



# 6.前端有名带参数的反向解析
	# 在urls.py文件中写入:
"""
url(r'^$', views.home),  # 客户输入默认域名 就是访问首页
url(r'^test/(?P<aaa>\d+)', views.test, name='test'),
"""

	# 在app目录下的views.py文件中写入
"""
from django.shortcuts import render, HttpResponse, reverse
# Create your views here.

def home(request):
    # 前端反向解析
    print(reverse('test', kwargs={'aaa': 111}))
    return render(request, 'home.html')
"""

	# home.HTML文件:
"""
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
    <a href="{% url 'test' aaa=111 %}">反向解析</a>
</body>
</html>
"""

image

image

5. 路由分发

# 重点
	以后我们的django项目会越来越大,那么就会导致总路由文件会越来越大,就会非常难维护,我们会把总路由分开到不同的应用下面
'''
django的每一个应用都支持有自己的对应配置:
	urls.py
	templates
	static
'''

# 使用路由分发一般都是多个应用
	1.先再创建一个应用
		startapp app02
		创建完成后记得到settings.py中配置
    
	2.将 urls.py文件复制一份到app01、app02目录下


# 实现路由分发方式一:
# 访问:127.0.0.1:8000/app01/index/
# 访问:127.0.0.1:8000/app02/index/
	1.总路由 urls.py中写入:
"""
from django.conf.urls import url
from django.contrib import admin


from app01 import views
from django.conf.urls import include
from app01 import urls as app01_urls
from app02 import urls as app02_urls

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', views.home),  # 客户输入默认域名 就是访问首页
    url(r'^app01/', include(app01_urls)),
    url(r'^app02/', include(app02_urls))
]
"""

	2.app01 urls.py文件中写入:
"""
from django.conf.urls import url
from app01 import views

urlpatterns = [
    url(r'^index', views.index),
]

"""

	3.app02 urls.py文件中写入:
"""
from django.conf.urls import url
from app02 import views

urlpatterns = [
    url(r'^index', views.index),
]
"""

	4.app01 views.py文件中写入:
"""
from django.shortcuts import HttpResponse
# Create your views here.

def index(request):
    return HttpResponse('app01:index')
"""

	5.app02 views.py文件中写入:
"""
from django.shortcuts import HttpResponse
# Create your views here.

def index(request):
    return HttpResponse('app02:index')
"""


# 实现路由分发方式二:
	在总路由 urls.py中写入:
"""
from django.conf.urls import url
from django.contrib import admin


from app01 import views
from django.conf.urls import include

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', views.home),  # 客户输入默认域名 就是访问首页
    url(r'^app01/', include('app01.urls')),
    url(r'^app02/', include('app02.urls'))
]
"""

image

image

6. 名称空间

# 当多个应用出现相同的别名时,反向解析就没办法识别了
	1.在总路由urls.py文件中:
"""
from django.conf.urls import url
from django.contrib import admin

from app01 import views
from django.conf.urls import include

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', views.home),  # 客户输入默认域名 就是访问首页
    url(r'^app01/', include('app01.urls', namespace='app01')),
    url(r'^app02/', include('app02.urls', namespace='app02'))
]
"""

	2.在app01的urls.py文件中:
"""
from django.conf.urls import url
from app01 import views

urlpatterns = [
    url(r'^index', views.index, name='app01_index'),
    url(r'^home', views.home, name='index'),
]
"""

	3.在app01的views.py文件中:
"""
from django.shortcuts import render, HttpResponse, reverse
# Create your views here.

def index(request):
    return HttpResponse('app01:index')

def home(request):
    print(reverse('app01:app01_index'))
    print(reverse('app02:app02_index'))
    return HttpResponse('home')
"""

	4.在app02的urls.py文件中:
"""
from django.conf.urls import url
from app02 import views

urlpatterns = [
    url(r'^index', views.index, name='app02_index'),
]
"""

	5.在app02的views.py文件中:
"""
from django.shortcuts import HttpResponse
# Create your views here.

def index(request):
    return HttpResponse('app02:index')
"""

image

7. 虚拟环境

# 针对不同的项目,创建出来一个新的python环境,类似于是一个新的python解释器

image

image

posted @ 2022-02-28 19:57  Deity_JGX  阅读(79)  评论(0)    收藏  举报