python--django模板(model)

 

 

 

1.模板中的模型介绍

    模型是数据唯一的、权威的信息源。它包含所储存数据的必要字段和行为。通常,每个模型对应数据库中唯一的一张表。

  • 每个模型都是django.db.models.Model 的一个Python 子类。
  • 模型的每个属性都表示为数据库中的一个字段。
  • Django 提供一套自动生成的用于数据库访问的API

例如:

定义一个Book模型,具有id title pubDate这三个属性。

from django.db import models


class Book(models.Model):

    id=models.AutoField(primary_key=True)
    title=models.CharField(max_length=32)
    pubDate=models.DateField()

 

id title pubDate是模型的三个字段,每个字符都被指定成一个类属性,每个属性映射到一个数据库的列。

通过logging可以查看翻译成的sql语句

 

2.映射关系如下:

     表名  <-------> 类名

       字段  <-------> 属性

    表记录 <------->类实例对象

3.数据库配置

  • django默认支持sqlite,mysql, oracle,postgresql数据库
  • django默认使用sqlite的数据库,默认自带sqlite的数据库驱动 , 引擎名称:django.db.backends.sqlite3
  • 引擎名称:django.db.backends.mysql

setting

在django的项目中会默认使用sqlite数据库,在settings里有如下设置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

如果想要更改为MySQL数据库,需要修改如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'books',    #你的数据库名称
        'USER': 'root',   #你的数据库用户名
        'PASSWORD': '', #你的数据库密码
        'HOST': '', #你的数据库主机,留空默认为localhost
        'PORT': '3306', #你的数据库端口
    }
}

【注意】

  • NAME即数据库的名字,在mysql连接前该数据库必须已经创建,而上面的sqlite数据库下的db.sqlite3则是项目自动创建
  • USER和PASSWORD分别是数据库的用户名和密码。
  • 设置完后,再启动我们的Django项目前,我们需要激活我们的mysql。
  • 然后,启动项目,会报错:no module named MySQLdb
  • 这是因为django默认你导入的驱动是MySQLdb,可是MySQLdb对于py3有很大问题,所以我们需要的驱动是PyMySQL
  • 所以,我们只需要找到项目名文件下的__init__,在里面写入:
import pymysql
pymysql.install_as_MySQLdb()

4.创建数据库

4.1 在Terminal中执行以下命令

python manage.py makemigrations

这条命令会模板在migrations中生成0001_initial.py这个文件,这个文件中存的就是用来生成表的数据。

4.2.再次执行一个命令生成表

python manage.py migrate

这样就会生成一个叫app01_book的表

如果执行完上边两个命令,数据库中的表依然不存在的话,需要检查,项目中的settings文件中应用是否加入到

ALLED_APPS 这个列表中

5.数据库的操作 

 5.1查询

def index(request):


    # 查询所有的书籍
    booklist=models.Book.objects.all()  # 返回值QuerySet    [obj1,obj2....]


    return render(request,"index.html",{"bookList":booklist})  #将所有书籍渲染到首页中。 #前边的bookList是 index.html中的变量名称,后边这个值就是上面的书籍对象。

index.html中的内容:

                {% for book_obj in bookList %}
                    <tr>
                        <td>{{ forloop.counter }}</td>
                        <td>{{ book_obj.title }}</td>
                        <td>{{ book_obj.pubDate|date:"Y-m-d" }}</td>
                        <td>{{ book_obj.price }}</td>
                        <td>{{ book_obj.publish }}</td>
                        <td>
                            <a href="/edit/{{ book_obj.id }}"><button class="btn btn-info">编辑</button></a>
                            <a href="/del/{{ book_obj.id }}"><button class="btn btn-danger">删除</button></a>

                        </td>

                    </tr>
                {% endfor %}

5.2.增加

def add(request):

    if request.method=="POST":
        print(request.POST)
        title=request.POST.get("title")
        pubdate=request.POST.get("pubdate")
        price=request.POST.get("price")
        publish=request.POST.get("publish")

        # 插入数据
        models.Book.objects.create(title=title,pubDate=pubdate,price=price,publish=publish)

        return redirect("/index/")
    return render(request,"add.html")

5.3删除

def delBook(request,id):

    models.Book.objects.filter(id=id).delete()

    return redirect("/index/")

 

 

 

 

 

 

 

 

 

 


 

posted @ 2017-11-12 21:54  嘟囔囔小孩  阅读(609)  评论(0编辑  收藏  举报