Django web架构学习(三)

in Python with 0 comment

view编写技巧

1.png

model.py编写技巧

models其实就是和数据库相关的操作,是django处理数据的一个特色之处,它包含你的数据库基本字段和数据,通过一些类封装好的api来直接操作数据库,当然你也可以直接写sql语句。

1.首先你要进行数据库的配置,在项目django1/setting.py中找到如下配置:

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

Django默认是使用sqlite3数据库,而现在市场占有率最高的是mysql,我们更改成mysql的配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django1',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '10.1.1.43',
        'PORT': '3306',
    }
}

2.在上面的host服务器上启动mysql,并对上面对应的用户进行授权。

mysql> grant all on *.* to root@'%' identified by '123456';
Query OK, 0 rows affected (0.14 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.20 sec)

mysql> create database django1;
Query OK, 1 row affected (0.38 sec)

django模型的注意事项:

模型必须都是在app下的models.py的文件中
模型如果需要映射到数据库,所在的app必须被安装
模型都必须继承自django.db下的models包的 Model类

python3中使用mysql报错ModuleNotFoundError: No module named 'MySQLdb'

原因是:
在python2.x中用mysqldb,但是在python3.x中已经不支持那个组件了。取而代之的是:

import pymysql

在项目文件夹下的_init_.py中导入pymysq包

import pymysql 
pymysql.install_as_MySQLdb()

Django的modules.py

django模型的使用:

一个表对应一个模型,表中的字段对应模型中的属性,映射模型到数据库之前,要提前把数据库给创建好
创建一个模型的类:

# -*- coding: utf-8 -*-
from django.db import models

class linuxtest(models.Model):
    name = models.CharField(max_length=100, null=False)
    address = models.TextField(null=False)
    age = models.IntegerField(null=False)
    email = models.EmailField(null=False)

要创建一个映射文件,通过执行以下命令创建:

python manage.py makemigrations linux       #后面跟linux是指定linux的app,如果什么都不写,泛指所有models

将映射文件中的映射数据真正提交到数据库中,执行以下命令:

python manage.py migrate linux

id字段django会自动给我们添加,没有写时自动添加,并自动把id作为主键。
注意事项:
如果修改字段或者更改改类,需要重新执行上面的两个命令,但是在pycharm中为了简单执行这两个命令,我们可以做如下设置:
点击Run->Edit Configurations,可以看到我们的django项目,然后点击+号,Name为:makemigrations,选择Custom run command为:makemigrations,Host和Port都为空,如下图所示:

2.png

如上相同方式,我们再创建一个migrate,把上面所有makemigrations替换成migrate即可。

3.png

运行makemigrations就相当于运行:

python manage.py makemigrations

运行migrate就相当于执行如下命令:

python manage.py migrate

通过在models.py中创建的类,在通过以上两个命令的时候,就被映射到我们数据库中去了,我们只需要创建好表就可以了,创建表,django就自动给我们做好了,而且数据库的操作django已经封装好了,我们只需要通过ORM方式进行调用就可以了。让我们从繁琐的sql语句中解脱出来,更加专注的整理我们的代码逻辑就好了。

更改表名:

class ArticleModel(models.Model):
    title = models.CharField(max_length = 100, null = False)
    content = models.TextField(null = False)
    class Meta:
        db_table = 'test_xiang'

在class类下面更改表名,然后执行python manage.py makemigrations和python manage.py migrate,把数据映射到数据库

class linuxtest(models.Model):
    name = models.CharField(max_length=100, null=False)
    address = models.TextField(null=False)
    age = models.IntegerField(null=False)
    email = models.EmailField(null=False)

    class Meta:
        db_table = 'niubi'            ##将表名改为niubi

执行命令:

python manage.py makemigrations linux
python manage.py migrate linux

数据库查看表名:
a.修改之前:

mysql> show tables;
+----------------------------+
| Tables_in_django1          |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
| linux_linuxtest            |
+----------------------------+
11 rows in set (0.00 sec)

b.修改后:

mysql> show tables;
+----------------------------+
| Tables_in_django1          |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
| niubi                      |
+----------------------------+
11 rows in set (0.00 sec)

本篇到此结束,后面继续补充更新。

Responses