Django是源自于fast-paced newsroom environment

因此Django的目的就是为了使得web开发变得简单有效

下面的内容是一个用Django开发的a database-driven Web app

1 设计你的模型

  你可以使用没有数据库的Django

  但是如果使用数据库的话, 由于Django提供了ORM( object-relational mapper )这个能解决很多数据库问题的数据模型

  你可以

  mysite/news/models.py

from django.db import models

class Reporter(models.Model):
full_name = models.CharField(max_length=70) def __str__(self): # __unicode__ on Python 2
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): # __unicode__ on Python 2
return self.headline

2 根据这个模型创建数据库表

python manage.py migrate

  该命令执行的时候, 会查看所有可用的模型, 然后在数据库中创建相应不存在的表和optionally providing much richer schema control

3 使用Python代码操作数据库

  1) 导入

from news.models import Reporter, Article

  2) 查询所有内容, 返回的是QuerySet对象, 处理类似于集合的处理方式

表名.onjects.all()

>>> Reporter.objects.all()
<QuerySet [<Reporter: John Smith>]>

  查询指定列用get()

  传入的参数是一个表达式, 可以使用特殊__startswith, __contains来获取以开始, 包含

>>> Reporter.objects.get(id=1)
<Reporter: John Smith>
>>> Reporter.objects.get(full_name__startswith='John')
<Reporter: John Smith>
>>> Reporter.objects.get(full_name__contains='mith')
<Reporter: John Smith>

  添加条件过滤用filter()

>>> Article.objects.filter(reporter__full_name__startswith='John')
<QuerySet [<Article: Django is cool>]>

  3) 新增数据

# Create a new Reporter.
>>> r = Reporter(full_name='John Smith') # Save the object into the database. You have to call save() explicitly.
>>> r.save() # Now it has an ID.
>>> r.id
1 >>> from datetime import date
>>> a = Article(pub_date=date.today(), headline='Django is cool',
... content='Yeah.', reporter=r)
>>> a.save() # Article objects get API access to related Reporter objects.
>>> r = a.reporter
>>> r.full_name
'John Smith'

  4) 删除数据

# Delete an object with delete().
>>> r.delete()

  对Repoter表的操作

 # Import the models we created from our "news" app
>>> from news.models import Reporter, Article # No reporters are in the system yet.
>>> Reporter.objects.all()
<QuerySet []> # Create a new Reporter.
>>> r = Reporter(full_name='John Smith') # Save the object into the database. You have to call save() explicitly.
>>> r.save() # Now it has an ID.
>>> r.id
1 # Now the new reporter is in the database.
>>> Reporter.objects.all()
<QuerySet [<Reporter: John Smith>]> # Fields are represented as attributes on the Python object.
>>> r.full_name
'John Smith' # Django provides a rich database lookup API.
>>> Reporter.objects.get(id=1)
<Reporter: John Smith>
>>> 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.

对Repoter的操作

  对Article表的操作

 # Import the models we created from our "news" app
>>> from news.models import Reporter, Article # Create an article.
>>> from datetime import date
>>> a = Article(pub_date=date.today(), headline='Django is cool',
... content='Yeah.', reporter=r)
>>> a.save() # Now the article is in the database.
>>> Article.objects.all()
<QuerySet [<Article: Django is cool>]> # Article objects get API access to related Reporter objects.
>>> r = a.reporter
>>> r.full_name
'John Smith' # And vice versa: Reporter objects get API access to Article objects.
>>> r.article_set.all()
<QuerySet [<Article: Django is cool>]> # The API follows relationships as far as you need, performing efficient
# JOINs for you behind the scenes.
# This finds all articles by a reporter whose name starts with "John".
>>> Article.objects.filter(reporter__full_name__startswith='John')
<QuerySet [<Article: Django is cool>]> # Change an object by altering its attributes and calling save().
>>> r.full_name = 'Billy Goat'
>>> r.save() # Delete an object with delete().
>>> r.delete()

对Article的操作

4 动态管理接口

  Django提供了功能完善的管理接口(administrative interface)

  需要在admin.py中添加配置

  mysite/news/admin.py

from django.contrib import admin

from . import models

admin.site.register(models.Article)

5 URLs的编写(URL调度程序)

  这个urls.py文件可以将URL的模式匹配与其相应的回调函数一一对应, 从而分离代码

  mysite/news/urls.py

from django.conf.urls import url

from . import views

urlpatterns = [
url(r'^articles/([0-9]{4})/$', views.year_archive),
url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
]

  这些是一些正则匹配来匹配输入的URL

  正则表达式中的括号可以获取匹配成功的值

  匹配的过程是从前往后依次匹配, 一旦匹配成功, 就会调用相应的view函数处理, 如果到最后都还时没有匹配成功, 那么就会返回特殊的视图404

  传递给view函数的有一个请求对象, 和上述中括号正则表达式捕获到的值

/articles/2005/05/39323/
news.views.article_detail(request, '2005', '05', '39323')

6 编写视图(views)

  编写范例如下

  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)

  最后返回的时候的html文件就用到了模板系统

7 编写模板

  在Django中可以设置一个目录列表, 里面有一个个存放模板的目录(具体设置方法)

  当查找模板的时候就依照顺序在这些目录中找

  具体模板文件有

  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>
<p>Published {{ article.pub_date|date:"F j, Y" }}</p>
{% endfor %}
{% endblock %}

  具体语法有

  1) 值的获取

{{ year }}

  可以通过点的方式, 来进行属性查找, 字典的键查找, 索引查找 函数调用

{{ article.headline }}

  2) 模板过滤器(template filter)

  变量后面用 | 来进行一下处理的方式, 类似于linux中的管道

  格式化时间的方式如下

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

  还可以自定义模板过滤器, 自定义模板标签

  3) 模板继承

  基本模板( base templates )如下

  mysite/templates/base.html

{% load static %}
<html>
<head>
<title>{% block title %}{% endblock %}</title>
</head>
<body>
<img src="{% static "images/sitelogo.png" %}" alt="Logo" />
{% block content %}{% endblock %}
</body>
</html>

  继承代码为

{% extends "base.html" %}

02 - 看一眼Django都有啥的更多相关文章

  1. FastJson遇见的问题或项目实战中优化的问题,看源码都可以解决

    1:感觉见鬼了一般存储JSONObject中的字段竟然不见了? JSONObject object=new JSONObject(); Map fields = new HashMap(); fiel ...

  2. 02 看懂Oracle执行计划

    看懂Oracle执行计划   最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing… 一:什么是Oracle执行计划? 执行计划是一条查询语句在 ...

  3. 一口气说出 OAuth2.0 的四种鉴权方式,面试官会高看一眼

    本文收录在个人博客:www.chengxy-nds.top,技术资源共享,一起进步 上周我的自研开源项目开始破土动工了,<开源项目迈出第一步,10 选 1?页面模板成了第一个绊脚石 > , ...

  4. django信号机制 (每个操作前后django都预留了两个钩子,便于统一化添加功能)

    信号 Django中提供了"信号调度",用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. 典型应用场景:在所有数据库相关操作(读/ ...

  5. ASP.NET MVC 应用程序的安全性,看一眼你就会了

    1.使用Authorize特性登陆对于我们开发程序而言,基本上都是要求角色成员使用Authorize特性,比如,对于管理员而言角色是Admin,对于登陆注册登陆用户而言是User那么我们在用户登陆的时 ...

  6. 学Java必看,不看的人都后悔了

    什么是Java? Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征.Java语言作为静态面向 ...

  7. 看一眼就学会的 HTML 小游戏搭建!

    本文作者:CODING 用户 - xfly 身边经常会有小伙伴问我有没有办法不买服务器也能上线自己的个人项目,比如不少同学都非常喜欢搭建一个属于自己的博客站点或者小游戏等. 目前相对比较简便的且不花自 ...

  8. 关于类、方法、对象(实例):通过一个例子看一下self都做了哪些事情

    我们在定义一个类时,经常会在类的各个方法中看到self,那么在程序执行时self到底起了什么作用,什么时候要加self,这一点需要我们思考并好好理解.之前在学习时没有想这么多,加之用pycharm写代 ...

  9. NO.012-2018.02.17《题都城南庄》唐代:崔护

    题都城南庄_古诗文网 题都城南庄 唐代:崔护 去年今日此门中,人面桃花相映红.去年春天,就在这扇门里,姑娘脸庞,相映鲜艳桃花.人面:指姑娘的脸.第三句中“人面”指代姑娘. 人面不知何处去,桃花依旧笑春 ...

随机推荐

  1. Unity5 怎样做资源管理和增量更新

    工具 Unity 中的资源来源有三个途径:一个是Unity自己主动打包资源.一个是Resources.一个是AssetBundle. Unity自己主动打包资源是指在Unity场景中直接使用到的资源会 ...

  2. 驱动程序分层分离概念_总线驱动设备模型_P

    分层概念: 驱动程序向上注册的原理: 比如:输入子程序一个input.c作为一层,下层为Dev.c和Dir.c,分别编写Dev.c和Dir.c向上Input.c注册:如图所示 分离概念: 分离概念主要 ...

  3. GCD(st表+二分)

    GCD Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submis ...

  4. iptables的例子1

      练习1:实现主机防火墙   设置主机防火墙策略为DROP: iptables -t filter -P INPUT DROP iptables -t filter -P OUTPUT DROP i ...

  5. 3.二级接口HierarchicalBeanFactory

    HierarchicalBeanFactory   字面意思是分层工厂, 那么这个工厂是怎么分层的呢? package org.springframework.beans.factory; //分层工 ...

  6. 测试站如何最快获取正式站的最新数据: ln -s

    针对静态数据, 比如图片/js等文件, 测试站如何获取最新的呢? ln -s /alidata/www/mysite/uploads /alidata/www/mysite_test/uploads ...

  7. Spring mvc 与 strust

    1. 机制:spring mvc的入口是servlet,而struts2是filter 2. 性能:spring会稍微比struts快.spring mvc是基于方法,单例(servlet也是单例): ...

  8. SQL优化小结

    一 背景      客户数据库经常出现死锁.超时.查询慢等问题,数据库mssql,数据量主要表大概上千W. 二 收集信息      首先是要找出IO大.查询慢.使用频率高的脚本.直接用Profiler ...

  9. linux基础part4

    linux基础 一.系统监控命令 1.top命令: a.如图显示使用top命令查看系统的当前运行的情况.如图对top命令执行的结果做了简单的图解,下面针对每一项做详细的解释. b.第一行显示的内容依次 ...

  10. Mac下XAMPP环境中安装MySQLdb

    环境: Mac OS X. Mac下安装MySQLdb模块着实多了些步骤. 用easy_install或者pip安装时有两大问题,"mysql_config not found"和 ...