设计模式

  • 定义

    # 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. 24、编写一个函数void replace(char *str1,char *str2,int i,int j),将字符串中str1中的第i个字符开始到j个字符结束的位置替换为str2.

    /* 编写一个函数void replace(char *str1,char *str2,int i,int j),将字符串中str1中的第i个字符开始到j个字符结束的位置替换为str2. */ #in ...

  2. centos7 uwsgi 加入系统服务

    生产环境中采用nginx + uwsgi + django 来部署web服务,这里需要实现uwsgi的启动和停止,简单的处理方式可以直接在命令行中启动和kill掉uwsgi服务,但为了更安全.方便的管 ...

  3. 内核常用的might_sleep函数

    1. 前言 内核版本:linux 4.9.225.内核版本:linux 4.9.225.对于内核常用的might_sleep函数,如果没有调试的需要(没有定义CONFIG_DEBUG_ATOMIC_S ...

  4. MyBatis-Plus 分页插件过时

    引用:https://blog.csdn.net/zyw562123314/article/details/108903456//分页插件老版本过时 旧版本配置 @Bean public Pagina ...

  5. typora使用CSDN图床

    前言 软件下载地址 typora 是一款好用的 markdown 文档编辑器. 我之前研究过CSDN上传图片的接口,前几天发现了Typora 这个好用的软件,可以自定义图床,因为我很多文章图片资源用的 ...

  6. linux 挂载 vdi 文件(virtual box虚拟机镜像文件)

    1. 下载 vdfuse 下载地址 2.解压deb文件 解压deb安装包文件,这里不使用安装命令是因为你的virtualbox 可能和vdfuse的版本不一致,导致安装失败,而我们只需要用到 vdfu ...

  7. Python爬虫爬取彼岸网4K Picture

    深夜爬取4k图片 下载流程 定义page_text函数,对第一页地址发送get请求,因为页面数据在页面源代码都能查到,所以发送get 请求就ok!,注意:要进行编码格式设置,可以去源代码查看, 定义p ...

  8. Python全栈工程师之从网页搭建入门到Flask全栈项目实战(4) - Flask模板语法与继承

    1.Flask模板介绍 前置:理解渲染机制即上篇笔记中render_template()功能是如何实现的! 1)找到html文件地址 2)读取html文件中的内容 3)替换html中的特殊字符 4)将 ...

  9. 为什么总是应该考虑给定 List 的初始大小

    在 .Net 技术中,使用 List<> 来存储数据是很常见的.List<> 是一个可以动态增长的泛型集合类型,可以存储任何类型的数据. 但是,在实际使用中,很多人并不注意给定 ...

  10. jmeter Foreach 控制器与json提取器/正则表达式

    适用场景:对某些业务数据依次操作 如:删除某个用户下的所有人员数据,无批量删除接口时,只能循环调用删除人员接口,直到删除完成 返回数据格式: 1.  使用json提取器或正则表达式提取业务数据(jso ...