当前位置: 首页 > news >正文

Django 视图基础

Django 视图基础

Django 视图是处理用户请求并返回响应的核心组件。视图可以是函数或类,通常定义在views.py文件中。

函数视图示例:

from django.http import HttpResponse def hello_world(request): return HttpResponse("Hello, World!")

类视图示例:

from django.views import View from django.http import HttpResponse class HelloWorldView(View): def get(self, request): return HttpResponse("Hello, World!")

URL 配置

视图需要通过 URL 配置映射到具体的路由。在urls.py中配置:

函数视图 URL:

from django.urls import path from .views import hello_world urlpatterns = [ path('hello/', hello_world), ]

类视图 URL:

from django.urls import path from .views import HelloWorldView urlpatterns = [ path('hello/', HelloWorldView.as_view()), ]

请求与响应

Django 视图通过request对象接收请求数据,并通过HttpResponse或其子类返回响应。

获取请求数据:

def show_data(request): name = request.GET.get('name', 'Guest') return HttpResponse(f"Hello, {name}!")

返回 JSON 响应:

from django.http import JsonResponse def json_response(request): data = {'key': 'value'} return JsonResponse(data)

模板渲染

Django 视图可以渲染 HTML 模板,动态生成页面内容。

配置模板:

  1. settings.py中确保TEMPLATES配置正确。
  2. 创建模板文件(如templates/my_template.html)。

渲染模板:

from django.shortcuts import render def template_view(request): context = {'variable': 'value'} return render(request, 'my_template.html', context)

类视图进阶

Django 提供了多种内置类视图简化常见任务,如ListViewDetailView等。

使用ListView

from django.views.generic import ListView from .models import MyModel class MyModelListView(ListView): model = MyModel template_name = 'my_model_list.html' context_object_name = 'objects'

使用DetailView

from django.views.generic import DetailView from .models import MyModel class MyModelDetailView(DetailView): model = MyModel template_name = 'my_model_detail.html'

表单处理

视图可以处理表单提交,验证数据并保存到数据库。

表单视图示例:

from django.shortcuts import render, redirect from .forms import MyForm def form_view(request): if request.method == 'POST': form = MyForm(request.POST) if form.is_valid(): form.save() return redirect('success_url') else: form = MyForm() return render(request, 'form_template.html', {'form': form})

认证与权限

Django 提供装饰器和混入类实现认证和权限控制。

使用@login_required

from django.contrib.auth.decorators import login_required @login_required def protected_view(request): return HttpResponse("Protected content")

类视图使用LoginRequiredMixin

from django.contrib.auth.mixins import LoginRequiredMixin from django.views import View class ProtectedView(LoginRequiredMixin, View): def get(self, request): return HttpResponse("Protected content")

文件上传

视图可以处理文件上传,保存文件到指定位置。

文件上传示例:

def upload_file(request): if request.method == 'POST' and request.FILES['file']: uploaded_file = request.FILES['file'] with open('uploads/' + uploaded_file.name, 'wb+') as destination: for chunk in uploaded_file.chunks(): destination.write(chunk) return HttpResponse("File uploaded successfully") return render(request, 'upload.html')
http://www.jsqmd.com/news/212033/

相关文章:

  • Java 进阶:异常影响性能吗?
  • 【Qt改变虚拟键盘的大小】
  • 一个在使用方法上的低级错误(MySQL场景)
  • java学习进阶之路,如果从一个菜鸟进阶成大神
  • java头歌-数组进阶
  • 破解空间困局:看紧凑型ARM工控机如何一机多能
  • java进阶知识点
  • Java基础进阶-水仙花数
  • Java进阶教程(二)代码块
  • 提升Python AI模型训练速度:从入门到进阶的实战优化方案
  • 【论文精读】-Graph-Grounded Pre-training and Prompting
  • Java_ElasticSearch(ES)——分布式搜索引擎
  • 手写一个单例模式 (考虑线程安全)。
  • 深度学习毕设选题推荐:基于python的CNN训练识别吃的美食基于深度学习的CNN训练识别吃的美食
  • 深度学习毕设项目推荐-深度学习基于python的CNN训练识别吃的美食基于python的深度学习CNN训练识别吃的美食
  • 救命神器!9个AI论文网站测评:本科生毕业论文全攻略
  • ReadView的结构和工作原理?
  • Java 进阶:如何让线程主动让出 CPU
  • 亲测好用10个AI论文工具,专科生轻松搞定论文写作!
  • JavaScript 调试
  • AngularJS 模块详解
  • 救命神器!自考必看TOP9 AI论文网站测评与推荐
  • idea创建springBoot的五种方式
  • 毫米波V2I网络的链路层仿真研究(Matlab代码实现)
  • Java实战:Spring Boot application.yml配置文件详解
  • python_flask求职招聘岗位信息分析系统的设计与实现_xz0yin70可视化大屏
  • Prompt Tuning动态选医疗特征提速诊断
  • idea、mybatis报错Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required
  • Azure GPv1 存储账户迁移至 GPv2 完整指南
  • Java学习进阶知识篇