返回404

from django.http import HttpResponse,  HttpResponseNotFound

def not_found(request):
return HttpResponse('Not found', status=)

return HttpResponseNotFound('Not found')

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

自定义错误视图

1. 修改配置文件

# settings.py

DEBUG = False
ALLOWED_HOSTS = ['*']

2. 创建视图函数

# views.py
from django.http import HttpResponse
def not_found_view(request):
return HttpResponse('404页面') def server_error(request):
return HttpResponse('500页面')

3. 配置项目路由

# urls.py
from . import views handler404 = views.not_found_view
handler500 = views.server_error # handler403 = views.403_view
# 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地址

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

get_object_or_404() 函数

from django.shortcuts import get_object_or_404
def my_view(request):
my_object = get_object_or_404(MyModel, pk=1) # 代码等同于
from django.http import Http404
def my_view(request):
try:
my_object = MyModel.objects.get(pk=1)
except MyModel.DoesNotExist:
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  事务功能

from django.views.decorators.http import require_http_methods
from django.db.transaction import atomic @require_http_methods(["GET", "POST"])
@atomic
def my_view(request):
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)

# settings.py
EMAIL_HOST = 'smtp.126.com'
EMAIL_PORT = 25
EMAIL_HOST_USER = '******'
EMAIL_HOST_PASSWORD = '******'
# EMAIL_USE_SSL = True # if port is 587, set True
# EMAIL_USE_TLS = True # if port is 465, set True # views.py
from django.core.mail import send_mail def send_email(request): if request.method == "POST":
subject = request.POST.get('subject', '')
message = request.POST.get('message', '')
from_email = request.POST.get('from_email', '')
if subject and message and from_email:
try:
send_mail(subject, message, from_email, ['nin@jianxin.com.cn'])
except Exception as e:
return HttpResponse(str(e)) return HttpResponse('发送成功!')
else:
return HttpResponse("确保字段填写正确!") elif request.method == "GET":
return render(request, 'send_email.html')

导出CSV

import csv
def download_csv(request):
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment;filename="download.csv"' writer = csv.writer(response)
writer.writerow(['First Row', 'Foo', 'Bar', 'Baz'])
writer.writerow(['SecondRow', 'A', 'B', 'C', '"Testing"', "Here's a quote"])
return response def download(request):
f = open('601318.csv', 'rb')
response = HttpResponse(f, content_type='application/csv')
response['Content-Disposition'] = 'attachment;filename="601318.csv"'
f.close()
return response

上传文件

# views.py
def upload(request):
if request.method == "POST":
upload_file = request.FILES.get('file', None)
if upload_file is None:
return HttpResponse('No file get')
else:
with open(upload_file.name, 'wb') as f:
for chunk in upload_file.chunks():
f.write(chunk) # f.write(upload_file.read())
return HttpResponse('OK')
elif request.method == "GET":
return render(request, 'upload.html') # upload.html
<h1>Upload</h1>
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
<label for="file">Upload: </label><input type="file" id="file" name="file"/><br/> <input type="submit" value="upload"/>
</form>

说明:

  • request.FILES

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

最新文章

  1. 跟vczh看实例学编译原理——二:实现Tinymoe的词法分析
  2. Java swing项目-图书管理系统(swing+mysql+jdbc) 总结
  3. 一款 .NET 下的轻量级 REST 和 HTTP API 客户端 - RestSharp
  4. Java语法基础(二)----运算符
  5. 浅谈mysql mvcc
  6. mysql 1067 启动错误!!!
  7. wikioi 1474 十进制转m进制
  8. CodeForces 560B Gerald is into Art
  9. sencha touch 框架的几种核心脚本文件之间的区别
  10. POJ-2240
  11. 使用Docker容器来源码编译etcd
  12. Swift:一个简单的货币转换器App在iOS10中的分析和完善
  13. 大规模微服务架构下的Service Mesh探索之路
  14. yum 命令
  15. Nginx + tomcat服务器 负载均衡
  16. Ubuntu 下搭建 Android 开发环境(图文)
  17. 天使投资、A轮、B轮、C轮
  18. Sahi (3) —— 压力测试Load Test以CAS SSO登陆场景为例(103 Tutorial)
  19. jQuery object and DOM Element
  20. php备注

热门文章

  1. python 处理 https链接 socket报错 链接https
  2. leetcode406
  3. chrome视频播放加速
  4. 《CSAPP》页表、页命中、缺页
  5. vue 和 react 路由跳转和传参
  6. MYSQL、SQL在LIKE里传的参数没有赋进去的原因
  7. est-framework框架的基本组件
  8. Python开发——函数【Python内建函数】
  9. JQuery复习心得
  10. Scrum冲刺阶段2