Django 初试水(三)
在前面的一和二中,分别实现了一些基础的操作,数据库和 Django 自带的管理界面,接下来,主要是创建我们自己的界面(视图)。
访问一个地址,对应的服务器直接返回一个视图。这是最常见的交互。
就好比访问 http://localhost:8000 会返回系统首页。
创建视图:polls/views.py
def index(request):
return HttpResponse("Hello, world. You're at the polls index.") def detail(request,question_id):
#return HttpResponse("You're looking at the result of question %s ." % question_id)
try:
question = Question.objects.get(pk=question_id)
except Question.DoesNotExist:
raise Http404(" Question does not exist !")
return render(request,'polls/detail.html',{'question':question})
def results(request, question_id):
response = "You're looking at the results of question %s."
return HttpResponse(response % question_id) def vote(request, question_id):
return HttpResponse("You're voting on question %s." % question_id)
修改路由信息:polls/urls.py
# 默认进来首页
path('', views.index, name='index'),
# ex: /polls/5
path('<int:question_id>/',views.detail,name='detail'),
# ex: /polls/5/results/
path('<int:question_id>/results/', views.results, name='results'),
# ex: /polls/5/vote/
path('<int:question_id>/vote/', views.vote, name='vote'),
打开服务器:
py manage.py runserver
访问路径: http://127.0.0.1:8000/polls/1/ 进入 detail 视图。
在访问路径的时候,服务器视图必须要做的只有两件事:返回一个包含被请求页面内容的 HttpResponse
对象,或者抛出一个异常(比如 404 等)。
在上面的例子中,为什么模型 API 不直接抛出 ObjectDoesNotExist 而是抛出 Http404 呢?
因为这样做会增加模型层和视图层的耦合性。指导 Django 设计的最重要的思想之一就是要保证松散耦合。一些受控的耦合将会被包含在 django.shortcuts 模块中。
也有 get_list_or_404()
函数,工作原理和 get_object_or_404()
一样,除了 get()
函数被换成了 filter()
函数。如果列表为空的话会抛出 Http404
异常。
这些内容自行去尝试。
在配置了多项目之后,直接访问:http://localhost:8000 发现抱错如下:
需要在mysite.urls.py ,加上:path('', include('polls.urls')), 访问跟项目的时候,默认指定进入 polls/urls.py 找路径。
urlpatterns = [
path('', include('polls.urls')),
path('expolls/', include('expolls.urls')),
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
也有多个应用是崇明,可以为 URL 添加命名空间。修改对应项目的 urls.py 文件。添加 属性 app_name=''
from django.urls import path from . import views app_name = 'polls'
urlpatterns = [
path('', views.index, name='index'),
path('<int:question_id>/', views.detail, name='detail'),
path('<int:question_id>/results/', views.results, name='results'),
path('<int:question_id>/vote/', views.vote, name='vote'),
]
修改为指向具有命名空间的详细视图:polls/templates/polls/index.html
<li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>
个人随手记录。
最新文章
- Python :open文件操作,配合read()使用!
- 破解 失控神域 dat文件格式。
- Windows部署WordPress
- 第二篇:从 GPU 的角度理解并行计算
- sizeClass和autolayout学习资源整理
- dojo省份地市级联之省份封装类(一)
- SRS-开源流媒体服务器
- yii防止延迟用户多次点击按钮重复提交数据
- 脑残式网络编程入门(六):什么是公网IP和内网IP?NAT转换又是什么鬼?
- Java当出现未被捕获的异常应该如何处理
- 查看Windows系统里的进程已运行的时间
- 802.11n 连接的建议设置是什么?
- 简表-Java-Echart报表介绍
- redis与DB数据同步问题
- 四、spring成长之路——springIOC容器(下)
- npm的常用命令
- [Jobdu] 题目1348:数组中的逆序对
- java _this关键字的用法
- kali aquatone安装
- angularjs学习笔记2—运行phonecat项目
热门文章
- Go1.14发布了,快来围观新的特性啦
- opencv —— calcHist、minMaxLoc 计算并绘制图像直方图、寻找图像全局最大最小值
- Chrome的插件扩展程序安装目录
- powersploit的两个信息收集的脚本
- #《Essential C++》读书笔记# 第四章 基于对象的编程风格
- Java面向对象入门(2)-访问修饰符
- MongoDB高可用架构集群管理(一)
- linux操作系统搭建测试环境
- 1级搭建类104-Oracle 12cR2 单实例 FS(阿里云)公开
- css3基础-动画案例(没啥实用性,纯粹好玩的)