首页 > 其他分享 >1.初识 Django

1.初识 Django

时间:2023-02-18 10:56:38浏览次数:65  
标签:__ full name Reporter models Django 初识 year

设计模式

  • 定义

    # 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 %}
    

标签:__,full,name,Reporter,models,Django,初识,year
From: https://www.cnblogs.com/hugboy/p/17132115.html

相关文章

  • 初识Linux(十七)------ 基础系统设置与备份策略
      新的CentOS7有针对不同的服务提供了相当大量的命令行设置模式,而过去那个setup似乎没用了。取而代之的是bash-complete提供了不少参数补全的设置工具,甚至包括网......
  • Django date__range([start,end])其中不包括end时间
    #date__range([start,end])#不包括end时间,需转换最后的截止时间fromdatetimeimportdatetime,timedeltanew_end=end+timedelta(days=1)......
  • Django Paginatior分页,页码过多,动态返回页码,页码正常显示
    问题:当返回数据较多,如设置每页展示10条,数据接近200条,返回页码范围1~20,前端每个页码都显示的话,就会出现页码超出当前页面,被遮挡的页码无法操作和显示不美观;代码优化:在使......
  • [django]钩子函数的一些细节(clean)
    函数名说明:clean_后面跟着的是需要校验字段名称示例:classRelUserReset(forms.ModelForm):defclean_confirm_password(self):pass校验顺序说明:如果是继承的......
  • Django操作redis
    一、环境安装基本环境:Python环境:Python3.8.16Django环境:4.1redis环境:参考搭建https://www.cnblogs.com/yclh/p/14742336.html并且已经添加了myApp的应用 安装red......
  • Django操作mongo数据库二(MongoClient方式)
    一、基本环境1、开发环境:Python环境:Python3.8.16Django环境:4.12、需要安装的包pipinstallpymongopipinstallmongoengine二、开发参数配置1、先创建一个mongoA......
  • Django操作mongo数据库一(配置文件里写连接信息)
    一、基本环境1、开发环境:Python环境:Python3.8.16Django环境:4.12、需要安装的包pipinstallpymongopipinstallmongoengine  二、开发参数配置1、先创建一个......
  • Django项目创建(一)
    一、创建django项目1、pycharm工具创建这种方式django会是默认最新版本的 2、命令行创建(1)创建新的开发环境condacreate--namepython3.8testpython=3.8(2)激活开......
  • Django项目创建应用(二)
    四、创建应用一个项目里可以创建多个应用,每个应用进行一种业务处理(1)激活当前项目的环境D:\pythonProject2023\djangoProject>activatepython3.8forDjango (python3.......
  • 对服务器进行心跳检测 python django
    (由于春节期间连不上服务器,但又不知道是不是服务器关机了,因此写一个心跳检测功能遇到问题时可以排查部分原因)具体来说分为客户端和服务端,客户端为校园服务器,服务端为我们自......