Django学习系列—第二天

Django学习系列—第二天

前面我们学习了模板,今天我们来学习模型。在Django中,数据库操作是非常简单的,这一节我们使用sqlite3来作为数据库。
首先打开models.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()


class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    email = models.EmailField()


class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()

首先创建了3个模型,也就是对应着数据库的3个表。
接下来打开cmd命令:
分别输入下面的两行代码,就可以将数据库同步了。

python manage.py makemigrations
python manage.py migrate

这样就实现了数据库同步操作。

比如打开终端输入:

>>> 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()
>>> p2 = Publisher(name="O'Reilly", address='10 Fawcett St.',
... city='Cambridge', state_province='MA', country='U.S.A.',
... website='http://www.oreilly.com/')
>>> p2.save()
>>> publisher_list = Publisher.objects.all()
>>> publisher_list
[<Publisher: Publisher object>, <Publisher: Publisher object>]

添加模块的字符串表现

我们获取数据只有看到对象的地址,我们需要操作,添加如下代码:

def __unicode__(self):
    return self.name

这样就实现了人性化操作。

在进行数据库操作的过程中,有很多的技巧:
我们很少会一次性从数据库中取出所有的数据;通常都只针对一部分数据进行操作。 在Django API中,我们可以使用filter() 方法对数据进行过滤。在实际使用过程中,有很多的方法可以用,这里就不详述了。

Django站点管理

如果对数据库进行操作,用一条一条的语句来实现,是特别麻烦的事。这可以使用Admin站点管理,来实现。
打开admin.py,添加如下代码:

admin.site.register(Publisher)
admin.site.register(Author)
admin.site.register(Book)

运行项目,得到下面的页面:

Django学习系列—第二天_第1张图片

这样就实现了admin的管理。

Django学习第三天

由于昨天比较懒,于是只完成了一部分的Django的学习,今天学习最重要的Django内容—表单。从Google的简朴的单个搜索框,到常见的Blog评论提交表单,再到复杂的自定义数据输入接口,HTML表单一直是交互性网站的支柱。 本章介绍如何用Django对用户通过表单提交的数据进行访问、有效性检查以及其它处理。 与此同时,我们将介绍HttpRequest对象和Form对象。

提交的数据信息

一个简单的表单处理示例

def search_form(request):
    return render_to_response('search_form.html')

对应的html文件就是:


Search







这里只有一个文本框,需要我们输入值,但我们还没有添加form指向的search方法,因此会报出404的错误。
我们添加下面的url映射以及方法。

def search(request):
    if 'q' in request.GET:
        message = 'You searched for: %r' % request.GET['q']
    else:
        message = 'You submitted an empty form.'
    return HttpResponse(message)

这样就可以收到浏览器发过来的请求了。

下面我们要来实现从数据库中读取数据来显示出来。
def search(request):
if ‘q’ in request.GET:
q = request.GET[‘q’]
books = Book.objects.filter(title__icontains=q)
return render_to_response(‘search_results.html’, {‘books’: books, ‘query’: q})
else:
return HttpResponse(‘Please submit a search term.’)

对应的html文件为:

<p>You searched for: <strong>{{ query }}</strong></p>

{% if books %}
<p>Found {{ books|length }} book{{ books|pluralize }}.</p>
<ul>
{% for book in books %}
<li>{{ book.title }}</li>
{% endfor %}
</ul>
{% else %}
<p>No books matched your search criteria.</p>
{% endif %}

这样就实现了简单的数据查询效果。

输出非html内容

在实际开发过程中,大家都需要进行手机客户端的访问,这时候就需要网站提供一些api给手机调用,今天给大家演示一下简单的应用。

def showImage(request):
    imgData = open('lena.jpg', 'rb').read()
    return HttpResponse(imgData, content_type='image/jpg')

这时候就可以用网页或手机登录该网站,就可以实现啦。明天开始写关于restful的api使用。

你可能感兴趣的:(数据库,django)