本篇文章主要介绍django的重定向和反向解析以及静态资源配置和模型继承的相关知识

重定向

重定向(Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置

  • HttpResponseRedirectHttpResponse的⼦类,可以完成⻚⾯的重定向
  • 设置重定向我们可以使用redirect(是HttpResponseRedirect的简写)

例如:
urls.py:

urlpatterns = [
    path('index/<int:num>', views.index),
    path('test/', views.test)
]

views.py:

def index(request, num):
    return HttpResponse(f'参数是:{num}')


def test(request):
    return redirect('/one/index/3', permanent=True)

让我们访问/one/test/的时候就会自动301重定向到/one/index/3

  • 这里redirect第二个参数默认为False表示302临时重定向,
  • Ture表示301永久重定向。
  • 这是对于搜索引擎来区别是否抓取原页面的,对于我们没有什么影响

反向解析

首先我们要在urls.py里定义namespace命名空间,并设置子路由的name

app_name = 'one'
urlpatterns = [
    path('index/<int:num>', views.index, name='index'),
    path('test/', views.test, name='test')
]

然后在views.py创建对应的方法使其渲染我们的html文件

def index(request, num):
    return HttpResponse(f'参数是:{num}')


def test(request):
    return render(request, '反向解析test.html', locals())

然后我们在html文件中创建一个a标签:

<h1>
    <a href="{% url 'one:index' 6 %}">点我跳转至index,参数为6</a>
</h1>
  • 动态⽣成路由地址带参的跳转
  • 冒号前面是命名空间,后面是子路由的name,注意用引号引起来 后面可跟对应的参数

为什么要用反向代理而不直接写相对路径呢?

  • 因为可能以后随着项目的完善原来的要跳转的文件移动到了别处,这样就不需要修改所有的路径,而直接使用反向解析不管移动到哪里都可以通过命名空间:名字找到对应的html文件

静态资源配置

  • 要是用像js,css,图片等需要从外部导入资源
  • 首先创建static目录
  • 然后再settings中注册:
STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'static')
]

然后将静态文件放到static中就可以在html中引用了:

{% load static %}
<img src="{% static 'test.png' %}" alt="test image">

模型继承

  • django中的模型支持继承
  • 默认的继承时会将通用的字段放到父表中,特定字段放到自己的表中,中间使用外键连接
    不好,因为关系型数据库关系越复杂,效率越低,查询越慢。父类表中也会存储过多的数据
  • 使用元信息来解决这个问题
    使模型抽象化。抽象的模型就不会在数据库中产生映射。子模型映射出来的表直接包含父模型的字段。
    例如我们创建一个模型:
class Animals(models.Model):
    a_name = models.CharField(max_length=16)

    class Meta:
        abstract = True


class Cat(Animals):
    c_eat = models.CharField(max_length=20)


class Dog(Animals):
    d_leg = models.IntegerField(default=4)

注意这里的Animial类中的元信息中定义改模型为抽象模型,然后下面的类继承于改抽象模型。

然后我们进行迁移和映射,在生成迁移文件的时候我们就可以发现这里只生成了了两个模型,因为抽象模型使不被生成的

通过查看cat表的DDL可以发现它并没有使用外键,子模型映射出来的表直接包含父模型的字段

最后修改:2020 年 07 月 08 日
如果觉得我的文章对你有用,请随意赞赏