Django学习day05

视图与网址进阶

视图一

一、url配置

1.配置流程

配置settings.py文件下的ROOT_URLCONF属性值

ROOT_URLCONF = 'day05_1.urls'
2.urlpatterns

在项目下新建urls.py文件,然后创建一个url的实例对象,正则匹配

urlpatterns = [
url(r'index/', views.index),
]
3.将项目下的url配置导入工程目录
from django.conf.urls import url, include
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^stu/', include('stu.urls', namespace='s')),
]

正则匹配注意事项:

  • 正则匹配时从上到下进行遍历,匹配到就不会继续向后查找了
  • 匹配的正则前方不需要加反斜杠
  • 正则钱需要加(r)表示字符串不转义

二、获取url路径的参数

1.url传递一个参数

要从url中获取一个参数,括号里写正则表达式,如下

url(r‘^grade/(\d+)/’, views.addStuInfo, name='addinfo')

要明确该值是传个哪个变量的:

url(r'addinfo/(?P<stu_id>\d+)/', views.addStuInfo, name='addinfo')

注意:url中添加了()传参,则在调用函数中必须接收 def addStuInfo(request, stu_id)

2.url传递多个参数

要获取url中的多个参数,可以添加多个括号,若不指定变量名,则按默认顺序进行匹配

url(r'selstu/(\d+)/(\d+)/(\d+)/', views.selStu),
或
url(r'adtstu/(?P<year>\d+)/(?P<month>\d+)/(?P<days>\d+)/', views.actStu),

实现方法

def selStu(request, m, n, p):
    return HttpResponse('获取url传递多个参数')
或
def actStu(request, year, month, days):
    return HttpResponse('获取传递的指定参数')

三、反向解析

使用反向解析优点:

如果在视图中,模板中使用硬编码连接,在url配置发生改变时,需要变更的代码会非常多,这样导致我们的代码结构不是很容易维护,使用反向解析可以提高我们代码的扩展性和可维护性

1.在模板中进行反向解析

关键字参数:{% url ‘namespace:name’ key1=value1 key2=value2 %}

url(r'^s/', include('stu.urls', namespace='s'))

url(r'allstu/(\d+)/', views.allStu, name='alls')

<a href="{% url 's:alls' g.id %}"></a>
2.在views中使用反向解析
from django.core.urlresolvers import reverse

HttpResponseRedirect(
    reverse(namespace:name, kwargs = {key1 : value1, key2 : value2})
)

例如

def allStu(request, g_id):
    return HttpResponseRedirect(
        reverse('s:reStu', kwargs={'g_id': g_id})
    )


def redirectStu(request, g_id):
    stus = Student.objects.filter(g_id=g_id)
    return render(request, 'students.html', {'stus': stus })

四、视图

1.错误视图

通常在项目下的views.py中定义

  • 404视图(页面没有被找到 page not found)
  • 400视图(客户端操作错误 bad request)
  • 403视图(权限错误 403 forbidden )
  • 500视图(服务器内部错误 server error)

在工程下的urls.py文件下添加如下代码:

from grade.views import page_not_found, server_error, permission_denied

handler404 = page_not_found
handler500 = server_error
handler403 = permission_denied

然后在项目下的views.py文件下定义方法:

def page_not_found(request):
    return render(request, '404.html')

def server_error(request):
    return render(request, '500.html')

def permission_denied(request):
    return render(request, '403.html')
2.自定义错误视图

在settings.py文件中修改debug模式

DEBUG = True

ALLOWED_HOSTS = []

改为

DEBUG = False

ALLOWED_HOSTS = ["*"]

将不显示错误详情,且所有ip地址都可连接

五、请求与响应

1.HttpRequest定义

服务器在接收到http请求后,会根据报文创建HttpRequest对象
视图中第一个参数就是HttpRequest对象
Django框架会进行自己的包装,之后传递给视图。

属性:

  • path    请求的完整路径
  • method    请求的方法,通常get,post
  • Encoding    编码方式,常用utf-8
  • Get    类似字典的参数,包含了get的所有参数
  • post    类似字典的参数,包含了post的所有参数
  • Files    类似字典的参数,包含了上传的文件
  • Cookies    字典,包含了所有的COOKIES
  • Session    类似字典,表示会话
  • 方法: is_ajax()    判断是否是ajax(),通常在移动端和js中
2.响应QueryDict类型
1)类似字典的结构数据,与字典的区别,可以存在相同的键

2)GET和POST都是QueryDict对象

3)QueryDict中数据获取方式
    dict[‘name’] 或者dict.get(‘name’)
    获取指定key对应的所有值
    dict.getlist(‘name’)
3.响应
1)可以直接返回一个HttpResponse对象:
    服务器返回给客户端的数据,HttpResponse由程序员自己创建
    不使用模板,直接HttpResponse()

2)可以返回模板
调用模板,进行渲染,直接使用render一步到位
返回表达式:
    render(request, template_name, context)
        request  请求体对象
        template_name  模板路径
        context  字典参数,用来填坑

3)属性
    Content   返回的内容
    Charset   编码格式
    status_code  响应状态码(200,4xx,5xx)
        4xx 客户端的错误
        5xx 服务端的错误
    content_type   MIME类型,定义传输类型的,比如有xml,html,png等等,比如content_type=’image/jpg’
4)方法
    init    初始化内容
    write(xxx) 直接写到文本
    flush 冲刷缓冲区
    set_cookie(key, value=’’, max_age=None, exprise=None)
    delete_cookie(key)   删除cookie,上面是设置
4)重定向
    HttpResponseRedirect响应重定向:可以实现服务器内部的跳转
    Return HttpResponseRedirect(‘/xxx/xxx’)
    使用的时候推荐使用反向解析
    JsonResponse
    使用json数据的请求,通常用在异步请求上jsonResponse(dict)
    content_type是application/json

视图二

一、cookie

1.描述

浏览器端的回话技术,cookie本身由浏览器生成,通过Response将cookie写在浏览器上,下一次访问,浏览器会根据不同的规则携带cookie过来

2.设置cookie
response.set_cookie(key, value, max_age=None, exprise=None)
request.GET.get(key)

注意:cookie不能跨浏览器

参数定义:

max_age :  整数,指定cookie过期时间,以秒为单位
exprise: 整数,指定过期时间,还支持是一个datetime或者timedelta,可以指定一个具体日期时间
max_age和exprise两个选一个指定
过期时间的几个关键时间
max_age设置为0浏览器关闭失效
设置位None永不过期
exprise=timedelta(days=10) 10天后过期

二、session

1.描述

服务端会话技术,依赖于cookie

2.开启session设置

django中启用SESSION 在settings中修改如下地方

INSTALLED_APPS:
    ‘django.contrib.sessions’
MIDDLEWARE:
    ‘django.contrib.sessions.middleware.SessionMiddleware’

每个HttpResponse对象都有一个session属性,也是一个类字典对象 讲解cookie和session通信,session_id等

3.常用操作
  • get(key, default=None) 根据键获取会话的值
  • clear() 清除所有会话
  • flush() 删除当前的会话数据并删除会话的cookie
  • delete request[‘session_id’] 删除会话
  • session.session_key 获取session的key 设置数据
  • request.session[‘user’] = username 数据存储到数据库中会进行编码使用的是base64

注意: Session 支持中文 cookie不支持中文 token自己维护

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
牙科就诊管理系统利用当下成熟完善的SSM框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的Mysql数据库进行程序开发。实现了用户在线查看数据。管理员管理病例管理、字典管理、公告管理、药单管理、药品管理、药品收藏管理、药品评价管理、药品订单管理、牙医管理、牙医收藏管理、牙医评价管理、牙医挂号管理、用户管理、管理员管理等功能。牙科就诊管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 管理员在后台主要管理病例管理、字典管理、公告管理、药单管理、药品管理、药品收藏管理、药品评价管理、药品订单管理、牙医管理、牙医收藏管理、牙医评价管理、牙医挂号管理、用户管理、管理员管理等。 牙医列表页面,此页面提供给管理员的功能有:查看牙医、新增牙医、修改牙医、删除牙医等。公告信息管理页面提供的功能操作有:新增公告,修改公告,删除公告操作。公告类型管理页面显示所有公告类型,在此页面既可以让管理员添加新的公告信息类型,也能对已有的公告类型信息执行编辑更新,失效的公告类型信息也能让管理员快速删除。药品管理页面,此页面提供给管理员的功能有:新增药品,修改药品,删除药品。药品类型管理页面,此页面提供给管理员的功能有:新增药品类型,修改药品类型,删除药品类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值