设计模式

  • 定义

    # 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的更多相关文章

  1. python的Web框架:初识Django

    web应用程序 本质 socket服务端 浏览器本质是一个socket客户端 1. 服务器程序 socket请求 接受HTTP请求,发送HTTP响应. 比较底层,繁琐,有专用的服务器软件,如:Apac ...

  2. 初识Django —Python API接口编程入门

    初识Django —Python API接口编程入门 一.WEB架构的简单介绍 Django是什么? Django是一个开放源代码的Web应用框架,由Python写成.我们的目标是用Python语言, ...

  3. web框架之初识Django

    目录 一.web框架 1.1什么是web框架 1.2自制的简易web框架 1.3三大主流web框架简介 Django Flask Tornado 1.4动态网页与静态网页 二.初识Django框架 2 ...

  4. Django(1) - 初识Django框架

    1.前言 该专栏学习笔记环境参数如下: Windows 10 Xampp/Navicat for MySQL Python 3.8+ Django 3.0.* Vue 2.6+ 开发工具: PyCha ...

  5. Django学习手册 - 初识django

    初识: django简介: 开放源代码的web应用框架 由python语言编写的. 一.框架基本概念(核心): 以上这个图就是 django 的核心逻辑图,必须熟记.后续的所有编程都跟这个图的逻辑息息 ...

  6. 巨蟒python全栈开发django2:初识django

    今日内容大纲: 1.起飞版web框架 2.自定制框架的流程 3.jinja2模板渲染初识 4.MVC&&MTV 5.django版本介绍及django安装 6.django初识(一些操 ...

  7. 初识Django之前端后端与数据库的配置

    目录 一.静态文件配置 二.关于form表单的补充 三.post请求出现403问题 四.request方法初识 4.1判断当前请求方式 4.2request.POST与request.GET 五.py ...

  8. 初识django

    一 从下面开始 所有的的web应用其实就是就是一个socket服务器,浏览器是一个web客户端. import socket def handle_request(client): buf = cli ...

  9. python——初识django的template

    这周听了老师讲关于django的框架问题,第一次比较透彻的了解了mtv框架.也是第一次接触模板的概念,研究了一下,现在就记录下来好嘞... 首先要介绍一点关于django的模板:我们为什么要使用模板呢 ...

  10. 初识DJango——MTV模型

    一.Django—MTV模型 Django的MTV分别代表: Model(模型):负责业务对象与数据库的对象(ORM) Template(模版):负责如何把页面展示给用户 View(视图):负责业务逻 ...

随机推荐

  1. 优雅的重启uwsgi 告别uwsgi reload过程中造成的无法请求、请求延迟等问题

    [uwsgi]#使用优雅重启 lazy-apps = true #监听monitor文件 当monitor文件发生改变是重启uwsgi touch-chain-reload = /home/monit ...

  2. 用最少的代码模拟gRPC四种消息交换模式

    我们知道,建立在HTTP2/3之上的gRPC具有四种基本的通信模式或者消息交换模式(MEP: Message Exchange Pattern),即Unary.Server Stream.Client ...

  3. 简单的sql注入3

    仍然 1 1' 1" 发现1'报错了.....我觉得作者对'情有独钟 再试试 1# 1'# 1"# 发现都可以正常登录 试试1' and '1'='1和1' and '1'='2发 ...

  4. 【Serverless】Unity快速集成认证服务实现邮件登录

    ​概述: 认证服务可以为您的应用快速构建安全可靠的用户认证系统,您只需在应用中访问认证服务的相关能力,而不需要关心云侧的设施和实现. 本次将带来如何使用Unity编辑器快速集成认证服务SDK并实现邮箱 ...

  5. 关于小米mini路由器开启ssh红灯解决

    前言 小米 后续版本 对 ssh固件校验失败导致的,下载路由器旧版开发版固件,然后用后台web升级成老版本后,再采用官方方法刷入即可. 旧版路由器固件下载 地址 其他 后续的刷机可以参考我的文章

  6. 【JUC】循环屏障CyclicBarrier详解

    欢迎关注专栏[JAVA并发] 前言 jdk中提供了许多的并发工具类,大家可能比较熟悉的有CountDownLatch,主要用来阻塞一个线程运行,直到其他线程运行完毕.而jdk还有一个功能类似并发工具类 ...

  7. 解读JVM级别本地缓存Caffeine青出于蓝的要诀 —— 缘何会更强、如何去上手

    大家好,又见面了. 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面.如果感兴趣,欢迎关注以获取后续更新. 在前面的几篇文章中,我们一起聊了下本地 ...

  8. TransmittableThreadLocal和@Async优雅的记录操作日志

    此文主要讲解: 如何实现操作记录 如何将TransmittableThreadLocal和@Async搭配使用 TransmittableThreadLocal阿里的一个开源组件,为了在使用线程池等会 ...

  9. MongoDB 强制使用索引 hint

    转载请注明出处: 虽然MongoDB 查询优化器一般工作的很不错,但是也可以使用 hint() 来强迫 MongoDB 使用一个特定的索引.在这种方法下某些情形下会提升性能. 一个有索引的 colle ...

  10. 在nodejs中体验http/2

    前言 2015年,HTTP/2 发布,直到2021年公司的项目才开始在实践中应用:自己对http2诸多特点的理解只存在于字面上,于是尝试在nodejs中实践一下,加深自己的理解. 多路复用 同域名下所 ...