The Django Book(一)
2017-12-12 17:42
381 查看
新建一个Django文件
//新建一个django项目 和 一个app $ django-admin.py startproject mysite $ django-admin.py startapp my_app
//运行(指定ip地址的)开发服务器 python manage.py runserver python manage.py runserver 0.0.0.0:8080
关于urls.py文件
网上有些例子用到 patterns 函数,我的django创建文件中不能对这个函数正常引用,需要加入:from django.conf.urls.defaults import *
函数用法:指定功能函数匹配的url
urlpatterns = patterns('', ('^hello/$', hello), )
关于正则语法
![](http://youdaonote-1251815136.coscd.myqcloud.com/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202017-12-08%20%E4%B8%8A%E5%8D%8811.09.03.png)
关于django的运行过橙
浏览器接收请求链接 /helloDjango通过setting.py文件中的ROOT_URLCONF配置来决定根URLconf.
Django在URLconf中的所有URL模式中,查找第一个匹配/hello/的条目。
如果找到匹配,将调用相应的视图函数
视图函数返回一个HttpResponse
Django转换HttpResponse为一个适合的HTTP response, 以Web page显示出来
关于使用模板
首先编写html文件,将此文件放入template目录下。修改setting.py文件,修改TEMPLATE_DIRS变量,将html文件的搜索路径加入
然后在app的view.py文件中就可以使用此模板:
//导入模板库 from django.template import Template, Context //通过get_template函数获取模板文件current_datetime.html t = get_template('current_datetime.html')
如果找不到该文件,将会引发一个 TemplateDoesNotExist 异常
载入模板后,使用Context渲染,然后使用HttpRespose返回此页面
例如:
from django.template.loader import get_template from django.template import Context from django.http import HttpResponse import datetime def current_datetime(request): now = datetime.datetime.now()t = get_template('current_datetime.html') html = t.render(Context({'current_date': now})) return HttpResponse(html)
Django在此基础上提供render_to_respose()来一次性完成载入,渲染,返回过程
使用:
from django.shortcuts import render_to_response import datetime def current_datetime(request): now = datetime.datetime.now() return render_to_response('current_datetime.html', {'current_date': now})
也可以使用
{% include 'nav.html' %}
Django遵循MVC模式。而在Django框架中,C由框架自己处理了。所以使用Django更注重MVT
- M 代表模型,即数据存取层。 该层处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。
T 代表模板,即表现层。 该层处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。
V 代表视图,即业务逻辑层。该层包含存取模型及调取恰当模板的相关逻辑。 你可以把它看作模型与模板之间的桥梁。
关于使用数据库模型
配置
使用模型前,需要进行配置,在setting.py文件中,找到需要配置的部分:DATABASE_ENGINE = '' DATABASE_NAME = '' DATABASE_USER = '' DATABASE_PASSWORD = '' DATABASE_HOST = '' DATABASE_PORT = ''
DATABASE_ENGINE设置:
django.db.backends.***其中*配置如下:
数据库 | 设置 |
---|---|
PostgreSQL | postgresql_psycopg2 |
MySQL | mysql |
SQLite | sqlite3 |
Oracle | oracle |
创建表对象
这样在mysql创建表时,就可以在创建的app目录下的model.py中定义:class Publisher(models.Model): name = models.CharField(max_length=30) address = models.CharField(max_length=50) city = models.CharField(max_length=60) state_province = models.CharField(max_length=30) country = models.CharField(max_length=50) website = models.URLField()
以上就是等同于你在mysql中创建了一个Publisher表,其中包含name,address等字段。字段的属性使用model提供的方法定义。
定义好之后,我们需要进行模型的安装。
模型安装
首先将这个app添加到mysite项目下:在setting.py文件下找到:INSTALLED_APPS的配置
将
mysite.my_app或
my_app添加到数组尾部
然后使用命令使其生效
//创建模板 python manage.py makemigrations //根据模板在数据库中建表 python manage.py migrate
连接mysql可查看指定数据库中出现:
![](http://youdaonote-1251815136.file.myqcloud.com/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202017-12-12%20%E4%B8%8B%E5%8D%884.10.52.png)
注意mysql大小写不敏感,统一添加了所属app的名称。
mysql数据操作(增删改查排序过滤等)
命令行添加数据时:>>> from books.models import Publisher >>> p1 = Publisher(name='Apress', address='2855 Telegraph Avenue', ... city='Berkeley', state_province='CA', country='U.S.A.', ... website='http://www.apress.com/') >>> p1.save() //注意如果不save()表插入是不成功的。
在使用时可以为对象添加一个方法
__unicode__()。
此方法在插入成功后,会出现所插入的一项的title值
def __unicode__(self): return self.title
查看数据库时:
>>> Publisher.objects.all() //相当于select * from yunting.my_app_publisher //其中Publsher是表类,模型默认还有object管理器,管理着所有针对数据包含、还有最重要的数据查询的表格级操作。all方法返回所有数据记录
关于过滤器使用:
//select * from tablename where name="press"; >>> Publisher.objects.filter(name="press") //select * from tablename where name LIKE "%press%"; >>> Publisher.objects.filter(name__contains="press")
获取单个对象:
>>> Publisher.objects.get(name="Apress")
如果找不到就返回异常,可以对异常做处理:
try: p = Publisher.objects.get(name='Apress') except Publisher.DoesNotExist: print "Apress isn't in the database yet." else: print "Apress is in the database."
关于排序:
比如我需要对某个过滤查询进行排序展示,可以使用
Publisher.objects.filter(country="U.S.A.").order_by("-name")
返回的查询结果本质上是数组,所以可以使用如下形式进行LIMIT操作:
Publisher.objects.order_by('name')[0] >>> Publisher.objects.order_by('name')[0:2]
关于update操作:
//取出p值修改后save() >>> p = Publisher.objects.get(name='Apress') >>> p.name = 'Apress Publishing' >>> p.save() //串连操作 >>> Publisher.objects.filter(id=52).update(name='Apress Publishing')
关于删除操作:
Publisher.objects.filter(country='USA').delete()
相关文章推荐
- The Django Book中文翻译版【第二版】
- [经验随手记]Django 之 学习The Django Book――书中的坑爹之处
- 中文翻译The Django Book
- The Django Book阅读中出现的问题
- 《the django book》记录 :admin声明在管理网站里的体现
- The Django Book【第4章 Django模板系统】
- 很值得看看的中文翻译The Django Book
- The Django Book - 第四章 模板
- The Django Book - 第四章 模板2
- 《The Django Book》实战--第二章--动态网页基础
- 20121024 The django book 笔记 视图和url
- 20121030 The django book 笔记 数据模型高级进阶
- The Django Book 网址
- [The Django Book 2.0][第二章:入门]django-admin.py startproject mysite不能建立project的解决方法
- 20121029 The django book 笔记 高级视图和URL配置
- <The django book> & <Offical site basic tutorial> - 读书笔记
- The Django Book【第5章 与数据库交互:模型】
- The Django Book【第6章 Django管理系统admin 】
- The Django Book
- The Django Book