返回404

  1. from django.http import HttpResponse, HttpResponseNotFound
  2.  
  3. def not_found(request):
  4. return HttpResponse('Not found', status=)

  5. return HttpResponseNotFound('Not found')

注意 返回的页面和status=200一样都是'Not found'

自定义错误视图

1. 修改配置文件

  1. # settings.py
  2.  
  3. DEBUG = False
  4. ALLOWED_HOSTS = ['*']

2. 创建视图函数

  1. # views.py
  2. from django.http import HttpResponse
  3. def not_found_view(request):
  4. return HttpResponse('404页面')
  5.  
  6. def server_error(request):
  7. return HttpResponse('500页面')

3. 配置项目路由

  1. # urls.py
  2. from . import views
  3.  
  4. handler404 = views.not_found_view
  5. handler500 = views.server_error
  6.  
  7. # handler403 = views.403_view
  8. # handler400 = views.400_view

render()函数

render(request, template_name, context=None, content_type=None, status=None, using=None)

必填项

  • request:request用户生成response

  • template_name:模板名称,可以是列表会使用先找到的那个

可选项

  • context:渲染模板的context字典,默认是{}

  • content_type:响应的 MIME type,默认使用 settings.py中 DEFAULT_CONTENT_TYPE

  • status:响应状态码 默认 status=200

  • using:模板引擎,可更改默认引擎,如jinja2

redirect()函数

redirect(to, permanet=False, *args,  **kwargs),返回一个HttpResponseRedirect

to参数可以是:

model对象、视图名称、相对或绝对URL地址

  1. object = MyModel.objects.get(...)
  2. return redirect(object)
  3. return redirect('some-view-name', foo='bar' )
  4. return redirect('/some/url/')
  5. return redirect('https://example.com/', permanent=True)

get_object_or_404() 函数

  1. from django.shortcuts import get_object_or_404
  2. def my_view(request):
  3. my_object = get_object_or_404(MyModel, pk=1)
  4.  
  5. # 代码等同于
  6. from django.http import Http404
  7. def my_view(request):
  8. try:
  9. my_object = MyModel.objects.get(pk=1)
  10. except MyModel.DoesNotExist:
  11. raise Http404("No MyModel matches the given query.")

其他 get_list_or_404()函数

reverse() 反向解析URL

reverse(viewname, urlconf=None, agrs=None, kwargs=None, current_app=None)

reverse_lazy(viewname, urlconf=None, agrs=None, kwargs=None, current_app=None)  惰性解析,Django启动加载顺序  如类中用reverse_lazy(),类视图

装饰器

  • require_http_methods(request_method_list)

  • require_GET()

  • require_POST()

  • require_safe()  安全性请求 GET、HEAD

  • gzip_page()  内容压缩, 一般会在代理服务器里处理,Nginx

  • cache_control(**kwargs),告诉浏览器的缓存,和memecache不同,可用在password

  • never_cache()

  • login_required()  验证页面必须登录,常用

  • transaction.atmoic  事务功能

  1. from django.views.decorators.http import require_http_methods
  2. from django.db.transaction import atomic
  3.  
  4. @require_http_methods(["GET", "POST"])
  5. @atomic
  6. def my_view(request):
  7. pass

HttpRequest and HttpResponse

https://docs.djangoproject.com/en/1.11/ref/request-response/

用户请求属性

  • HttpReqeust.scheme

  • HttpReqeust.body

  • HttpReqeust.path

  • HttpReqeust.method

  • HttpReqeust.GET

  • HttpReqeust.POST

  • HttpReqeust.COOKIES

  • HttpReqeust.FILES

  • HttpReqeust.META

应用程序设置的属性

  • HttpReqeust.current_app

  • HttpReqeust.urlconf

中间件设置的属性

  • HttpReqeust.session

  • HttpReqeust.site

  • HttpReqeust.user

  • HttpReqeust.user.is_authenticated

  • ......

发送邮件(Django自带)

django.core.mail.send_mail(subject, message, from_email, recipient_list,

fail_sliently=False, auth_user=None, auth_password=None, connection=None, html_message=None)

  1. # settings.py
  2. EMAIL_HOST = 'smtp.126.com'
  3. EMAIL_PORT = 25
  4. EMAIL_HOST_USER = '******'
  5. EMAIL_HOST_PASSWORD = '******'
  6. # EMAIL_USE_SSL = True # if port is 587, set True
  7. # EMAIL_USE_TLS = True # if port is 465, set True
  8.  
  9. # views.py
  10. from django.core.mail import send_mail
  11.  
  12. def send_email(request):
  13.  
  14. if request.method == "POST":
  15. subject = request.POST.get('subject', '')
  16. message = request.POST.get('message', '')
  17. from_email = request.POST.get('from_email', '')
  18. if subject and message and from_email:
  19. try:
  20. send_mail(subject, message, from_email, ['nin@jianxin.com.cn'])
  21. except Exception as e:
  22. return HttpResponse(str(e))
  23.  
  24. return HttpResponse('发送成功!')
  25. else:
  26. return HttpResponse("确保字段填写正确!")
  27.  
  28. elif request.method == "GET":
  29. return render(request, 'send_email.html')

导出CSV

  1. import csv
  2. def download_csv(request):
  3. response = HttpResponse(content_type='text/csv')
  4. response['Content-Disposition'] = 'attachment;filename="download.csv"'
  5.  
  6. writer = csv.writer(response)
  7. writer.writerow(['First Row', 'Foo', 'Bar', 'Baz'])
  8. writer.writerow(['SecondRow', 'A', 'B', 'C', '"Testing"', "Here's a quote"])
  9. return response
  10.  
  11. def download(request):
  12. f = open('601318.csv', 'rb')
  13. response = HttpResponse(f, content_type='application/csv')
  14. response['Content-Disposition'] = 'attachment;filename="601318.csv"'
  15. f.close()
  16. return response

上传文件

  1. # views.py
  2. def upload(request):
  3. if request.method == "POST":
  4. upload_file = request.FILES.get('file', None)
  5. if upload_file is None:
  6. return HttpResponse('No file get')
  7. else:
  8. with open(upload_file.name, 'wb') as f:
  9. for chunk in upload_file.chunks():
  10. f.write(chunk)
  11.  
  12. # f.write(upload_file.read())
  13. return HttpResponse('OK')
  14. elif request.method == "GET":
  15. return render(request, 'upload.html')
  16.  
  17. # upload.html
  18. <h1>Upload</h1>
  19. <form method="post" enctype="multipart/form-data">
  20. {% csrf_token %}
  21. <label for="file">Upload: </label><input type="file" id="file" name="file"/><br/>
  22.  
  23. <input type="submit" value="upload"/>
  24. </form>

说明:

  • request.FILES

  • enctype 默认是 "application/x-www-form-urlencoded"

Django View 进阶的更多相关文章

  1. Python之路【第十七篇】:Django【进阶篇 】

    Python之路[第十七篇]:Django[进阶篇 ]   Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接 ...

  2. Python之路【第十七篇】:Django【进阶篇】

    Python之路[第十七篇]:Django[进阶篇 ]   Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接 ...

  3. Python开发【第二十二篇】:Web框架之Django【进阶】

    Python开发[第二十二篇]:Web框架之Django[进阶]   猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 ...

  4. Python之路,Day15 - Django适当进阶篇

    Python之路,Day15 - Django适当进阶篇   本节内容 学员管理系统练习 Django ORM操作进阶 用户认证 Django练习小项目:学员管理系统设计开发 带着项目需求学习是最有趣 ...

  5. django view 装饰器

    Django提供了几个可以应用于视图以支持各种HTTP特性的装饰器 Allowed HTTP django.views.decorators.http里的装饰器可以根据请求方法限制对视图的访问. re ...

  6. Django 2.0 学习(07):Django 视图(进阶-续)

    接Django 2.0 学习(06):Django 视图(进阶),我们将聚焦在使用简单的表单进行处理和精简代码. 编写简单表单 我们将用下面的代码,来替换之前的detail模板("polls ...

  7. Django View(视图系统)

    Django View 官方文档 一个视图函数(类),简称视图,是一个简单的 Python 函数(类),它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误 ...

  8. Django orm进阶查询(聚合、分组、F查询、Q查询)、常见字段、查询优化及事务操作

    Django orm进阶查询(聚合.分组.F查询.Q查询).常见字段.查询优化及事务操作 聚合查询 记住用到关键字aggregate然后还有几个常用的聚合函数就好了 from django.db.mo ...

  9. 安卓自定义View进阶-Canvas之画布操作 转载

    安卓自定义View进阶-Canvas之画布操作 转载 https://www.gcssloop.com/customview/Canvas_Convert 本来想把画布操作放到后面部分的,但是发现很多 ...

随机推荐

  1. python实战博客

    2018-10-31 更新Logging日志记录以及异常捕获 感谢廖大教程.Python实战 直接在闲置的服务器上开发.阿里云Centos 6.8 64位. 1 搭建开发环境 Python 环境是Py ...

  2. nginx+python+windows 开始

    参考文章:http://www.testwo.com/article/311 参考如上文章基本能够完成hello world示例,我来记录下自己操作步骤及不同点,用以备忘,如果能帮助到其他人更好. 以 ...

  3. Thrift 的五种工作模式

    一.thrift 共有5中工作模式,分成阻塞和非阻塞: 阻塞:TSimpleServer.TThreadPoolServer 非阻塞:TNonblockingServer.THsHaServer.TT ...

  4. android toolbar效果4

    两个标题的,右边一个按钮 activity_main.xml: <android.support.v7.widget.Toolbar style="style/toolbarStyle ...

  5. Bash常用快捷键及其作用

    在 Bash 中有非常多的快捷键,如果可以熟练地使用这些快捷键,可有效地提高我们的工作效率.只是快捷键相对较多,不太好记忆,这就要多加练习和使用.这些快捷键如表 1 所示. 表 1 Bash 常用快捷 ...

  6. WPF程序 双击exe自动申请“以管理员方式运行”权限

    实现方式: 在 xxx.exe 目录下包含其对应的清单文件(xxx.exe.manifest, 由 VS 编译时自动生成): 用记事本打开 manifest 文件,将文件中的项:<request ...

  7. jquery.validate和jquery.form配合实现验证表单后AJAX提交

    基础代码其实很简单,之后一点一点扩充.最终代码写在最后. 表单: <form action="@Url.Action("AddColumns","Cont ...

  8. 微信H5支付 遇到坑的一些解决方法

    解决办法 1. 商家参数格式有误,请联系商家解决 a.对于前后端分离的开发模式 前端发起请求 服务端请求微信h5支付统一下单接口 返回参数mweb_url 给前端 然后前端调起微信h5支付 b.注意的 ...

  9. php生成红包

    <?php /** * 随机生成红包金额 * @param $n 红包个数 * @param $sum 总金额 整数 * @param $index_max 最大金额在数组中索引 * @para ...

  10. 100-days: ten

    Title: Emma Watson(艾玛·沃森), Keira Knightley(凯拉·奈特莉) among stars(众多明星之一)  urging(竭力主张,呼吁某事) better pro ...