前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django篇(三)

Django篇(三)

作者头像
不断折腾
发布2019-09-23 10:55:33
9000
发布2019-09-23 10:55:33
举报
视图

1、视图的功能

接受请求,和模板页(T)、models进行交互,并返回应答。

可以返回一个内容HttpResponse,也可以重定向redirect。

2、视图的使用

2.1必须有一个request参数,来接收服务器返回给我们的内容,

比如在登陆的时候的账号密码发送过来,我们就是用request这个参数来接收。

2.2必须要配置url,才能映射到我们的方法。

3、简述url的匹配过程:

比如浏览器中输入127.0.0.1:8000/aindex,

浏览去发送到项目的urls.py文件中进行匹配,如果我项目的url匹配是这样的:

urlpatterns = [

url(r'^admin/', include(admin.site.urls)),

url(r'^a', include('student.urls')),

]

那么我们Django框架从浏览器中拿到aindex来和url中匹配,很明显第一个和我们的url并不匹配,

第二个匹配,于是就映射到student这个应用下的urls.py文件中,假如我们student.py下的url.py匹配规则是这样:

urlpatterns = [

url(r'^index$', views.index),

]

从项目中匹配的a会过滤掉,就只剩下index发送到我们应用(student)下的urls.py中,刚好匹配,就会映射到我们视图

中的index方法。

注意:如果访问的地址是这样:127.0.0.1:8000/aindex?id=1.

其中的?id=1是不参与匹配的,他代表的是参数,在视图中我也可以通过request对象获取到。

4、当我们浏览器访问一个不存在的页面会报错404,当我们模板有错误的时候会报错500,

并且都会提示哪里有错误,这在项目上线后是不允许的,怎么让他只显示404或者500,不会提示具体的错误信息?

需要在setting.py中,将DEBUG=True修改为DEBUG=False,将ALLOWED_HOSTS=[]修改成ALLOWED_HOSTS=[*]表示允许所有人访问。

当然在开发的时候还是True好点。

4.1当做了上面一系列修改后,错误页面就只会显示Not Found,这种简单的信息。

如果你认为这个404页面不好看,或者500页面不好看,我们只需要在模板(Templates)下创建404.html

或者500.html,当找不到页面的时候,就会自动访问404.html,无需其他配置。

5、捕获url参数

在上一篇实例中,我们就使用过,上一篇文章中应用下的url.py是这样的:

urlpatterns = [

url(r'^classinfo$', views.show_classname),

url(r'^classinfo/(\d+)$', views.show_stuinfo),

]

其中带有正则中带有括号的,就是我们用来捕捉url参数的,你想要什么内容,就用()将它括起来。

我们在视图中,需要在该对应的视图方法上再添加一个参数,这个参数接收的就是我们正则中括起来的部分。

6、cookie和session

由于HTTP协议是无状态的,他不会记住你上一次做了什么操作。

所以我们需要cookie和session来帮助我们需要记住的东西,(比如账号密码)

那么为什么需要两个来保存呢?

cookie是储存在本地,也就是你磁盘的文本,是不安全的,session是储存在服务端的,所以需要这两个相辅相成。

cookie的请求过程:

浏览器输入网址,发送给服务器请求,服务器进行处理,设置cookie信息,返回给浏览器set-cookie这个字段,浏览器保存到本地,

下次再次请求这个域名相关的网站,浏览器会将cookie一起发送给服务器,服务器如果接收到cookie,从中取出账号等,就不用我们再次登陆了。

cooike是由过期时间的,如果不设置,就会在关闭浏览器的时候失效。

session:

依赖于cookie。请求的过程差不多,session是放在cookie张保存的。

cookie常用于记住用户名。

session常用于记住登陆状态,等要求安全系数高的数据。

模板

1、模板的作用

展示我们的html页面。

2、模板的查找顺序

首先会在我们自己创建的templates下查找模板文件,如果没有,会在配置文件setting.py的INSTALLED_APPS中查找,

必须要有templates这个文件夹,他才会去查找,所有只会再去查找前两个应用时候有该文件。所以404.html不用我们配置,他就会找到。

3、变量使用

3.1、模板使用返回的数据

{{数据}}

3.2、for循环

{% for i in 可遍历对象%}

数据 xxx

显示遍历的次数,从1开始

{{forloop.counter}}

数据为空

{ empty}

为空时输出

{% endfor%}

if判断

{% if 条件%}

{%elif 条件%}

{%else%}

{%endif%}

其中的比较运算符,运算符左右需要空格隔开。

4、过滤器

常用操作:

date:改变日期的显示格式

lenth:求长度。

default:设置默认值

使用格式:模板变量|过滤器:参数

比如stuinfo.bir_date是从view返回的生日

我们写成:{{stuinfo.bir_date|date:'Y年-m月-d-日'}}

求长度:没有参数比如 name|lenth

设置默认值:name|defaulf:'zhangsan'

还有很多,遇到再说。

5、模板注释

单行注释:{% 注释内容 %}

多行注释:{% comment %}

内容

{%endcomment%}

html注释:<!-- 内容 -->

6、继承模板页

很多时候,我们页面大多数的菜单,头部,底部都是一样的,我们不可能每次都写一遍,所以就需要继承模板页。

{% extends '父页面路径'%},同时我们也要在父模板中预留位置来存放子页面:

{%block 块名%}

{%endblock 块名%}

块名,为自定义名字。子模版也写上同样的:

{%block 块名%}

{%endblock 块名%}

7、登录装饰器

我们基本大部分页面都是需要登陆才可以访问,此时我们就需要写一个登陆的装饰器来帮助我们。

写一个装饰器函数:

def login_required(func):

def wrapper(request,*view_args,**view_kwargs):

# 判断是否存在session,不存在表示没登录

if request.session.has_key('你的session名字')

return func(request,*view_args,**view_keargs)

else:

# 重定向

return redirect('登陆页的视图函数')

return wrapper

8、url反向解析

如果每个页面都有返回主页,但是我们的主页方法改了,那么每个返回主页的链接都要修改,很麻烦。

可以将我们的url写成动态的。

在写成动态之前需要:

将项目下的url.py,添加一个namespace参数:

urlpatterns = [

url(r'^admin/', include(admin.site.urls)),

url(r'^a', include('student.urls',namespace='student')),

]

我在include中添加了一个namespace参数,一般给应用名,再修改应用下的urls.py添加一个name属性:

urlpatterns = [

url(r'^classinfo$', views.show_classname,name = 'classinfo'),

url(r'^classinfo/(\d+)$', views.show_stuinfo),

]

此时:我们页面返回classinfo的页面可以写成:

<a href="{% student:classinfo %}">classinfo</a>

就会自动的去访问classinfo页。如果在url中捕捉的有参数:需要写成

<a href="{% url 'student:classinfo' 参数1 %}">classinfo</a>,如果还有参数直接添加就好了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python入门到放弃 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档