路由分配,模版渲染

Django介绍

​ Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。

基本在虚拟机运行框架,使用Uduntu运行Django

本地pycharm编写代码,上传虚拟机运行

url基本概念及格式

  • 在项目目录下创建urls.py文件

    from django.urls import path,include
    from . import views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('index/',views.index),
        path('index1/<course>',views.index1),
        path('index2/<course>&<int:july>',views.index2), #多个参数时的url拼接 转换器的使用
    ]
  • 在项目目录下创建views.py文件

    from django.http import HttpResponse
    
    def index(request):
        return HttpResponse('why,why')
    
    #单个的数据传入
    def index1(request,course):
        return HttpResponse('这是你不能拒绝的%s'%course)
    
    #多个数据传入 和转换器的使用
    def index2(request,course,july):
        return HttpResponse('几几年啊{},几月啊{}'.format(course,july))

path和re_path

  • path

    • path('index2/<course>&<int:july>',views.index2)
      • 使用尖括号(<>)从url中捕获值。
        包含一个转化器类型(converter type)
        没有转化器,将匹配任何字符串,当然也包括了 / 字符
        • 转换器有以下
          • str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
          • int,匹配正整数,包含0。
          • slug,匹配字母、数字以及横杠、下划线组成的字符串。
          • uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
          • path,匹配任何非空字符串,包含了路径分隔符
    • 当前面的url匹配成功后就会调用后面的视图函数
  • re_path

    • re_path('^hello/$',views.test5)

      • 使用与正则类似进行匹配以hello开头并以/结尾的url

      re_path('^hello/(?P<yy>[0-9]+)/',views.test6)

      • 匹配以hello开头的并满足某种条件的url
    • def test5(request):
          return HttpResponse('这是用的re_path设置的')
      
      def test6(request,yy):
          print(yy,type(yy))
          return HttpResponse('hello %s'%yy)

Kwargs的作用

传递一个Python 字典作为额外的参数传递给视图函数

使用这个在主urls.py文件给大量的url传递统一参数是尤为方便

#主urls.py文件
from django.contrib import admin
from django.urls import path,include
from . import views

urlpatterns = [
    path('book/',include('book.urls'),{'switch':'true'}) #使用include给分路由分配路径
]
#这是名为book的app的views.py
from django.shortcuts import render,reverse,redirect
from django.http import HttpResponse

# Create your views here.
#都要接收 **kwargs 否则会报错
def index(request,**kwargs):
    return HttpResponse('这是book里的index')

def index1(request,**kwargs):
    if kwargs.get('switch') == 'true':
        print('参数传递成功')
    return HttpResponse('这是book里的index1')

name的作用

给一个匹配的url地址取名字一般用于模板,也可以使用reverse进行页面重定向

这时用户访问老的url时则会重定向到新的url

#app为book的urls.py
#注意app的urls.py不能为空只有格式也行 否则会报错
#注意 要在主项目设置里进行注册
from django.urls import path
from . import views

urlpatterns = [
    path('old/',views.old_url),
    path('new/',views.new_url,name='RE_url'),
]
#app为book的views.py
from django.shortcuts import render,reverse
from django.http import HttpResponse

def old_url(request,**kwargs):
    if kwargs.get('switch') == 'true':
        # return redirect('/book/new/')  #满足条件 使用redirect 进行网页重定向的写法
        return redirect(reverse('RE_url'))  #满足条件 使用reverse 进行网页重定向
    return HttpResponse('这是老的地址')

def new_url(request,**kwargs):
    return HttpResponse('这是新的地址')
  • name参数可以给这个url取一个合适的名字。
  • 通过给url取名字,以后在view或者模板中使用这个URL,就只需要通过这个名字就可以了。
  • 这样做的原因是防止url的规则更改,会导致其他地方用了这个url的地方都需要更改,但是如果取名字了,就不要做任何改动了切记
  • redirect是重定向,reverse是将urlname解析成url本身的函数

模板路径配置

  • 模版放在哪里

    • 在主目录下创建一个templates目录用来存放所有的html的模板文件
    • templates目录里面在新建各个以app名字命名的目录来存放各个app中模板文件
  • 创建完成后要在主项目的setting 中进行配置

    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            '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',
                ],
            },
        },
    ]

##模板渲染方式

即对前端页面的编写

  • 可以直接硬写进行对页面的编写

    def index2(request,**kwargs):
        return HttpResponse('<h1>可以直接硬写进行页面的编写</h1>')
  • 使用render

    from django.shortcuts import render,reverse,redirect
    from django.http import HttpResponse
    
    from django.template.loader import get_template
    
    def index3(request,**kwargs):
        U = get_template('book/book_index.html') #得到template里所写的html文件
        HTML = U.render() #进行渲染
        return HttpResponse(HTML) #返回
    from django.shortcuts import render,reverse,redirect
    from django.http import HttpResponse
    #也可直接使用 此时可直接使用template下所写的html文件 然后使用render直接渲染
    def index3(request,**kwargs):
        return render(request,'book/book_index.html')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值