django model filter_Django快速创建一个实例教程

快速安装

假设你已经安装好了python,那么进入命令行工具,开始安装django,这里直接是全局安装,如果需要使用虚拟环境,安装方式会不同。

$ pip install diango

创建项目

进入你需要安装django的文件夹,使用命令行,先创建django的项目,再创建app。项目代表的是整个网站,而app其实就是这个网站里面的功能包,一个网站就是一个项目,一个项目里面可以有很多app。

$ django-admin startproject mysite$ python manage.py startapp news

设计模型

django提供了便捷的orm工具,通过这个,可以更为简单的来设计你的数据库,并且不需要任何一句sql代码。

修改刚才创建的app news文件夹内的models.py,来添加2个模型进去。整体文件夹目录应该如下:

mysite/news/models.py

from django.db import modelsclass Reporter(models.Model):    full_name = models.CharField(max_length=70)    def __str__(self):            return self.full_nameclass Atricle(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

模型应用到数据库

模型虽然已经创建成功了,但是并没有应用到数据库,在命令行里面,使用下面2行命令,来让模型应用到数据库。

$ python manage.py makemigrations$ python manage.py migrate

makemigrations命令可以查找到所有的可用models,并且如果这个models如果不在数据库,会创建对应的migrations脚本文件。

而migrateming命令,则是让这些migrations来自动创建数据库表和结构的命令。

开始使用 django 的 orm

接来下,在命令行里面,进入python。就可以使用命令行来快速体验django的orm的便捷性。

$ python# 导入django mysite项目中的app news的model>>> from news.models import Article, Reporter# 查找Reporter表内所有的数据,现在还没有数据,所以是空的>>> Reporter.objects.all()    # 创建一个新的Reporter项目>>> r = Reporter( full_name = 'John Smith')# 把这个新的Reporter项目插入到数据库>>> r.save()# 插入到数据库之后,这个变量为r的Reporter项目就会自动返回数据库的id了>>> r.id1# 我们再次查找Reporter表内的所有数据,这次就能找到一个数据了>>> Reporter.objects.all()]>    # 输出这个数据的full_name字段的值>>> r.full_name'John Smith'# django orm中其他获取数据的方式# 查找ID为1的数据>>> Reporter.objects.get(id=1)  #查找以John开头的数据>>> Reporter.objects.get(full_name__startswith = 'John')  # 查找以mith结尾的数据>>> Reporter.objects.get(full_name__contains='mith')  # 查找id=2的数据,因为我们的表中并不存在id为2的数据,所以会抛出一个错误>>> Reporter.objects.get( id = 2)Traceback (most recent call last): ... DoesNotExist: Reporter matching query does not exist. # 创建一个 article项目。>>> from datetime import date>>> a = Atricle( pub_date = date.today(), headline = 'Django is cool',content = 'Yeah.' , reporter = r)>>> a.save()# 现在从article中获取数据>>> Article.objects.all()# 通过article中设置的reporter外键,来查找reporter中的数据>>> r = a.reporter>>> r.full_name'John Smith'# 反向通过Reporter中的数据来查找Article中的数据>>> r.article_set.all()# 在Article表中,可以直接使用Reporter表的数据来反向查找Article表中的数据,因为设置了外键,这里查找Reporter中以John开头的数据的Atricle中的数据  >>> Article.objects.filter(reporter__full_name__startswith='John')# 修改Reporter中的数据>>> r.full_name = 'Billy Goat'>>> r.save()# 删除Reporter的数据>>> r.delete()

模型注册到django自带的admin后台

django自带了一个非常强大的admin后台,我们创建了模型之后,只需要把这个模型注册到后台里面,这样可以直接在后台中可视化添加数据。

mysite/news/admin.py 中添加代码:

from django.contrib import adminfrom . import modelsadmin.site.register(models.Article)

这样就可以把模型注册到后台了,在后台就可以直接添加Atricle数据了。

建立URLs路由

上面我们已经创建了项目也创建了app和数据模型,并且已经成功了插入了一条数据到数据库,现在,就开始创建路由和视图,这样我们插入的数据,就可以通过url访问到了。

mysite/news/urls.py 中添加代码,一般在django app文件夹中是没有urls.py这个文件的,我们可以手动创建一个。

from django.urls import pathfrom . import viewsurlpatterns = [    path('articles//', views.year_archive),    path('articles///', views.month_archive),    path('articles', views.article_detail),]

上面建立了3个路由规则,并且每个路由都指向了一个视图的函数,现在建立了路由,下一步就开始建立视图函数,这样通过路由访问url,然后django会引用视图函数,来输出内容。

编写视图

视图函数可以返回被请求的数据,视图函数的工作就是从数据库中获取数据,然后传递给模板,进行数据渲染,这样一个网页就展示在用户的面前了。

mysite/news/views.py 中添加视图函数。

from django.shortcuts import renderfrom .models import Articledef 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)

编写模板

上面的视图函数里面引用了 news/year_archive.html 模板,并且向这个模板中传递了context数据,现在开始编写这个模板,把context这个数据在模板中显示出来。

这个模板的具体文件夹位置,应该是在 mysite/news/templates/news/year_archive.html ,在app news文件夹中新建一个templates模板文件夹,并且在这个模板文件夹里面还需要建立一个news文件夹,这个是为了防止django在查找模板的时候会和其他app的模板重命而让django出现错误。

{% extends "base.html" %}{% block title %}Articles for {{ year }}{% endblock %}{% block content %}

Articles for {{ year }}

{% for article in article_list %}

{{ article.headline }}

By {{ article.reporter.full_name }}

Published {{ article.pub_date|date:"F j, Y" }}

{% endfor %}{% endblock %}

这个模板中的变量用大括号都括起来了,这个的意思就是输出变量的值。并且模板的开头使用了 extends 'base.html',说明这个模板继承的是base.html模板,这样就可以让公共代码写入到base.html中,减少模板之间代码的冗余。

下面我们开始写一个base.html模板,一般基础模板,我们可以直接写在项目的templates文件夹下面,而不是app的templates文件夹下面。

mysite/templates/base.html

{% load static %}    {% block title %}{% endblock %}    {% block content %}{% endblock %}

我们可以看到base.html开头使用了load static,这个就是可以直接引用django下的静态文件,比如图片,js,还有css等。这些静态文件的储存路径一般在项目的static文件夹下面。

这样我们一个最简单的django项目就建立成功了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值