1.初识 Django
设计模式
定义
# mysite/news/models.py from django.db import models class Reporter(models.Model):
full_name = models.CharField(max_length=70) def __str__(self):
return self.full_name class Article(models.Model):
pub_date = models.DateField()
headline = models.CharField(max_length=200)
content = models.TextField()
reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE) def __str__(self):
return self.headline
应用
$ python manage.py makemigrations $ python manage.py migrate
调用非常的人性化, 像调用API一样的感觉。
数据表里的每条记录就是一条对象,他的字段就是对象的属性
# 从子应用 news 引用我们定义的模型 >>> from news.models import Article, Reporter # 获取所有对象
>>> Reporter.objects.all()
<QuerySet []> # 新建一个 Reporter 对象
>>> r = Reporter(full_name='John Smith') # 保存到数据库 >>> r.save() # 自动生成的 id >>> r.id
1 >>> Reporter.objects.all()
<QuerySet [<Reporter: John Smith>]> # 查看对象的属性 >>> r.full_name
'John Smith' # 通过 id 调用对象 >>> Reporter.objects.get(id=1)
<Reporter: John Smith> # 通过属性 full_name 调用对象 >>> Reporter.objects.get(full_name__startswith='John')
<Reporter: John Smith> >>> Reporter.objects.get(full_name__contains='mith')
<Reporter: John Smith> >>> Reporter.objects.get(id=2)
Traceback (most recent call last):
...
DoesNotExist: Reporter matching query does not exist. # 新建一个 Article 对象 >>> from datetime import date >>> a = Article(pub_date=date.today(), headline='Django is cool',
... content='Yeah.', reporter=r) >>> a.save() >>> Article.objects.all()
<QuerySet [<Article: Django is cool>]> # 调用 关联的 Reporter 对象 >>> r = a.reporter
>>> r.full_name
'John Smith' # 反向调用 >>> r.article_set.all()
<QuerySet [<Article: Django is cool>]> # 查找发布者名字以 "John" 开头的文章
# Django 可以根据你的需要跟踪关系 >>> Article.objects.filter(reporter__full_name__startswith='John')
<QuerySet [<Article: Django is cool>]> # 修改属性
>>> r.full_name = 'Billy Goat'
>>> r.save() # 删除对象
>>> r.delete()
注册到管理站点
又是非常人性的一点,只需写一行代码把写好的模型在 **admin.py 注册 **一下。
我们就相当于写好了一个表的可视化 CRUD 后台。
注册
# mysite/news/admin.py from django.contrib import admin from . import models admin.site.register(models.Article)
规划 URLs
- Django 的这个设计, 有利于将 Python 与 URL进行解耦** ( 各个模块分离、独立 )**。
# mysite/news/usls.py from django.urls import path from . import views urlpatterns = [
path('articles/<int:year>/', views.year_archive),
path('articles/<int:year>/<int:month>/', views.month_archive),
path('articles/<int:year>/<int:month>/<int:pk>/', views.article_detail),
]
编写视图
视图就是上面 URLs 里的视图函数,函数从** URL 里获取前端传来的参数**进行逻辑处理。
然后用数据对模(HTML)板渲染。返回。
示例
# mysite/news/views.py from django.shortcuts import render from .models import Article def year_archive(request, year):
a_list = Article.objects.filter(pub_date__year=year)
context = {'year': year, 'article_list': a_list}
return render(request, 'news/year_archive.html', context)
设计模板
Django 中可以设置模板(HTML)路径便于检索, 减小模板之间的冗余。
模板语言让 Python 和 HTML 动态的融合到一块。
它还使用了 “模板继承” 的概念, 让新的模板在某个模板的基础上扩展。
这样我们只需要写不一样的地方就可以了。
示例
# mysite/news/templates/news/year_archive.html {% extends "base.html" %} {% block title %}Articles for {{ year }}{% endblock %} {% block content %}
<h1>Articles for {{ year }}</h1> {% for article in article_list %}
<p>{{ article.headline }}</p>
<p>By {{ article.reporter.full_name }}</p> # 模板过滤器 "|" ,将一个 Python datetime 对象转化为指定的格式
<p>Published {{ article.pub_date|date:"F j, Y" }}</p> {% endfor %} {% endblock %}
1.初识 Django的更多相关文章
- python的Web框架:初识Django
web应用程序 本质 socket服务端 浏览器本质是一个socket客户端 1. 服务器程序 socket请求 接受HTTP请求,发送HTTP响应. 比较底层,繁琐,有专用的服务器软件,如:Apac ...
- 初识Django —Python API接口编程入门
初识Django —Python API接口编程入门 一.WEB架构的简单介绍 Django是什么? Django是一个开放源代码的Web应用框架,由Python写成.我们的目标是用Python语言, ...
- web框架之初识Django
目录 一.web框架 1.1什么是web框架 1.2自制的简易web框架 1.3三大主流web框架简介 Django Flask Tornado 1.4动态网页与静态网页 二.初识Django框架 2 ...
- Django(1) - 初识Django框架
1.前言 该专栏学习笔记环境参数如下: Windows 10 Xampp/Navicat for MySQL Python 3.8+ Django 3.0.* Vue 2.6+ 开发工具: PyCha ...
- Django学习手册 - 初识django
初识: django简介: 开放源代码的web应用框架 由python语言编写的. 一.框架基本概念(核心): 以上这个图就是 django 的核心逻辑图,必须熟记.后续的所有编程都跟这个图的逻辑息息 ...
- 巨蟒python全栈开发django2:初识django
今日内容大纲: 1.起飞版web框架 2.自定制框架的流程 3.jinja2模板渲染初识 4.MVC&&MTV 5.django版本介绍及django安装 6.django初识(一些操 ...
- 初识Django之前端后端与数据库的配置
目录 一.静态文件配置 二.关于form表单的补充 三.post请求出现403问题 四.request方法初识 4.1判断当前请求方式 4.2request.POST与request.GET 五.py ...
- 初识django
一 从下面开始 所有的的web应用其实就是就是一个socket服务器,浏览器是一个web客户端. import socket def handle_request(client): buf = cli ...
- python——初识django的template
这周听了老师讲关于django的框架问题,第一次比较透彻的了解了mtv框架.也是第一次接触模板的概念,研究了一下,现在就记录下来好嘞... 首先要介绍一点关于django的模板:我们为什么要使用模板呢 ...
- 初识DJango——MTV模型
一.Django—MTV模型 Django的MTV分别代表: Model(模型):负责业务对象与数据库的对象(ORM) Template(模版):负责如何把页面展示给用户 View(视图):负责业务逻 ...
随机推荐
- 基于.NET 7 的 WebTransport 实现双向通信
Web Transport 简介 WebTransport 是一个新的 Web API,使用 HTTP/3 协议来支持双向传输.它用于 Web 客户端和 HTTP/3 服务器之间的双向通信.它支持通过 ...
- 银河麒麟V10 SP1服务器操作系统-单用户模式与救援模式调试方法
单用户模式 单用户模式:该模式下系统并没有完全运行进来,只是部分程序运行,包括网络服务,ssh服务等部分服务未运行,因此无法通过远程登录到操作系 统.进入单用户方式进行系统维护由是ROO ...
- Opengl ES之YUV数据渲染
YUV回顾 记得在音视频基础知识介绍中,笔者专门介绍过YUV的相关知识,可以参考: <音视频基础知识-YUV图像> YUV数据量相比RGB较小,因此YUV适用于传输,但是YUV图不能直接用 ...
- ThinkPHP6.0在phpstorm添加查询构造器和模型的代码提示
ThinkPHP6.0升级后 使用查询构造器和模型都没有了提示 原因是tp6源码中没有添加注释 找到Model.php * @method Query where(mixed $field, stri ...
- .net 温故知新:【10】.NET ORM框架EFCore使用入门之CodeFirs、DBFirst
前言:本系列是我自己学习.net相关知识,以便跟上.net跨平台的步伐,目前工作原因基本在.net Framework4.7以下,所以才有了这一系列的学习总结,但是并不是从基本的C#语法和基础知识开始 ...
- 详解 Redis 中 big keys 发现和解决
在使用 Redis 时,可能会出现请求响应慢.网络卡顿.数据丢失的情况.排查问题的时候,发现是 big keys 的问题. 什么是 big keys 在 Redis 中,一个字符串类型最大可以达到 5 ...
- 比 JSON.stringify 快两倍的fast-json-stringify
前言 相信大家对JSON.stringify并不陌生,通常在很多场景下都会用到这个API,最常见的就是HTTP请求中的数据传输, 因为HTTP 协议是一个文本协议,传输的格式都是字符串,但我们在代码中 ...
- Spring面试点汇总
Spring面试点汇总 我们会在这里介绍我所涉及到的Spring相关的面试点内容,本篇内容持续更新 我们会介绍下述Spring的相关面试点: Spring refresh Spring bean Sp ...
- Sqlserver分布式跨数据库查询、Join,以及分布式事务
简言: 这篇文章我要谈一谈SQL Server分布式跨服务器查询,多表Join,以及分布式事务的处理 SqlServer跨服务器查询的方式 以往自己才疏学浅,学习了一波之后,在这记录下来. 1. 使用 ...
- 【Redis技术探索】「数据迁移实战」手把手教你如何实现在线+离线模式进行迁移Redis数据实战指南(在线同步数据)
从实战出发使用RedisShake进行Redis数据在线+离线模式迁移指南 RedisShake基本介绍 RedisShake是基于redis-port基础上进行改进的是一款开源的Redis迁移工具, ...