The Django Book(一)

新建一个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),
)

关于正则语法

image

关于django的运行过橙

  1. 浏览器接收请求链接 /hello
  2. Django通过setting.py文件中的ROOT_URLCONF配置来决定根URLconf.
  3. Django在URLconf中的所有URL模式中,查找第一个匹配/hello/的条目。
  4. 如果找到匹配,将调用相应的视图函数
  5. 视图函数返回一个HttpResponse
  6. 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.*** 其中*配置如下:

数据库设置
PostgreSQLpostgresql_psycopg2
MySQLmysql
SQLitesqlite3
Oracleoracle

后面的如实填写,注意如果使用的SQLite,DATABASE_NAME填写绝对路径。其余参数留空。

创建表对象

这样在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_appmy_app添加到数组尾部

然后使用命令使其生效

//创建模板
python manage.py makemigrations
//根据模板在数据库中建表
python manage.py migrate    

连接mysql可查看指定数据库中出现:

image

注意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()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Django 中,重写模型的 `save` 方法可以实现在保存模型实例时自定义一些行为。对于一对多关系,你可以在子模型中重写 `save` 方法来实现一些自定义的行为。 以下是一个重写 `save` 方法的示例,其中一个 `Author` 模型有一个一对多关系的子模型 `Book`: ```python from django.db import models class Author(models.Model): name = models.CharField(max_length=50) def __str__(self): return self.name class Book(models.Model): title = models.CharField(max_length=100) author = models.ForeignKey(Author, on_delete=models.CASCADE) def __str__(self): return self.title def save(self, *args, **kwargs): # 在保存 Book 实例之前执行某些操作 self.title = self.title.upper() super(Book, self).save(*args, **kwargs) # 在保存 Book 实例之后执行某些操作 print('Book instance saved') ``` 在上面的示例中,我们在 `Book` 模型中重写了 `save` 方法,将 `title` 属性转换为大写并保存。当你在视图中创建 `Book` 实例并保存时,Django 将会自动调用我们重写的 `save` 方法: ```python from django.shortcuts import render from .models import Author, Book def my_view(request): author = Author.objects.create(name='John Doe') book = Book.objects.create(title='The Catcher in the Rye', author=author) return render(request, 'my_template.html', {'book': book}) ``` 当你执行上面的代码时,Django 将会在保存 `book` 实例时自动调用 `save` 方法,并执行我们定义的自定义行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值