1. 创建project
创建app: python3 manage.py startapp polls
注意在创建完project之后,如果需要用PyCharm修改最外层的project name,不能用refactor->rename的方式,可以用mv的形式
2. 创建第一个app
- 编辑views.py,views.py里的内容就是给用户看的。HttpResponse只能返回字符串,如果想返回一个文件内的内容,可以用render。
- 让app内的urls.py可以映射到views.py。这里涉及三个参数:
- 最前面的’’: 在访问web时,需要在url地址后面加的
- 中间的views.index:表示路由到views.py里的index函数
- 最后的name=’index’:可以不用加
- 让project里的urls.py可以映射到app里的urls.py。urls.py的两个参数,前面一个指的是访问web时,需要在url地址后面加上polls;后一个参数指的是映射到app的名称和module的名字。
3.数据库配置
1.在MacOS中安装postgres数据库,具体步骤如下
brew install postgres # 安装postgres数据库
postgres -V # 查看安装是否成功
# 保证每次开机postgres都开启
pg_ctl -D /usr/local/var/postgres start && brew services start postgresql
psql postgres # 进入数据库
\du # 查看数据库有哪些用户
\password username #为用户创建密码,默认密码是空
创建一个新的数据库(注意是数据库,不是数据表),可以采用如下的命令
$ createdb -h localhost -p 5432 -U username(shu) database(aiplatform) # 注意此操作不进入数据库
此时我们用数据库连接工具,例如pgadmin就可以看到创建的数据库
2.Django默认的数据库是sqlite,如果要使用其他的数据库,需要指定数据库引擎和名字,端口,用户名,密码等等参数。采用本地的postgres数据库,可以进行如下的设置,注意这里的NAME需要填前面创建的数据库名。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'aiplatform',
'HOST': 'localhost',
'PORT': 5432,
'USER': 'shu',
'PASSWORD': 805115148
}
}
4.数据表操作
1.创建Models
from django.db import models
from django.contrib.auth.models import User
class Poll(models.Model):
question = models.CharField(max_length=100)
created_by = models.ForeignKey(User, on_delete=models.CASCADE)
pub_date = models.DateTimeField(auto_now=True)
def __str__(self):
return self.question
class Choice(models.Model):
poll = models.ForeignKey(Poll, related_name='choices', on_delete=models.CASCADE)
choice_text = models.CharField(max_length=100)
def __str__(self):
return self.choice_text
class Vote(models.Model):
choice = models.ForeignKey(Choice, related_name='votes', on_delete=models.CASCADE)
poll = models.ForeignKey(Poll, on_delete=models.CASCADE)
voted_by = models.ForeignKey(User, on_delete=models.CASCADE)
class Meta:
unique_together = ("poll", "voted_by")
Django用模型来表示一个数据表,模型在python中就是一个类,模型里的变量表示的是数据表的一个字段。
需要特别注意的是,一个字段如果是外键(ForeignKey),那么在数据库里面,会在这个字段后面加上一个id来表示字段名,例如Poll这个类的create_by这个字段
如果一个字段是外键,在新增数据记录的时候,怎么填这个字段呢?需要在后面要加上 _id
例如上面例子中的Poll这个数据表,本来字段名是poll,但是存到数据库里的是poll_id,因此入库的时候也需要改变
2.添加设置
要将app包含到项目中,需要在INSTALLED_APPS设置中添加对其配置类的引用。
INSTALLED_APPS = [
'polls.apps.PollsConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
这里的’polls.apps.PollsConfig’表示的就是polls
class PollsConfig(AppConfig):
name = 'polls'
此时就可以开始执行数据库迁移操作了
3.激活Models
python3 manage.py makemigrations polls
python3 manage.py migrate
makemigrations相当于写好了SQL命令(增删改查),migrate相当于去执行SQL命令。
执行完makemigrations之后,可以在app的migrations文件夹里面多了一个0001_initial的文件,它就相当于去写SQL命令。
值得注意的是,python3 manage.py migrate有可能不成功,此时可以通过如下命令来使前面的sql语句来成功
python3 manage.py migrate --fake myappname zero #重置所有的migrations
python3 manage.py migrate myappname
4.修改字段
如果想修改字段,只需要在Models里面直接修改想要改的字段,然后执行老两句即可
python3 manage.py makemigrations polls
python3 manage.py migrate
5.新增字段
新增字段和修改字段操作基本相同,只是Django会要求你为新增的字段填一个默认的参数
选择1,再填入一个参数即可
6.删除字段
5.ORM操作
1.导入数据表
ORM引入数据库的方式为
python3 manage.py shell
from polls.models import Choice, Question
其中,polls是app名字,Choice和Question是数据表的名字,都是在app里面定义的。值得注意的是,可能存在这种情况,同一个数据表在两个都定义了,那么以managed = True为准,例如下面这种情况要以左边为准
2.增
例如我们要在Question数据表里面新增一个字段,可以用如下操作
from django.utils import timezone
q = Question(question_text="What's new?", pub_date=timezone.now())
q.save()
3.删
例如在AI-Platform里常用到的
from project.models import AI_Project
AI_Project.objects.filter(id="").delete()
4.改
AI_Models.objects.filter(id=model_id).update(standard_job=job_id)
5.查
template_id = AI_Project.objects.get(id=testing_dataset_id)
6.插
Django还有一个很重要的就是插入数据
single_ai_job = ai_job.filter(datasetid=dataset_id).first() # 对象
single_ai_job.insertion_time = timezone.now() # 插入字段
single_ai_job.save() # 保存
6.Admin账号
使用Django Admin可以快速对数据库的各个数据表进行增删查改
1.创建admin用户
python3 manage.py createsuperuser
2.启动server
python3 manage.py runserver
启动完之后,在地址栏输入http://127.0.0.1:8000/admin/即可访问
3.数据管理
在页面中可以看到所有的App,以及每个App所对应的数据表
打开其中的一条记录,可以看到数据的详细信息,并且支持在里面直接对数据做修改
7.视图
一个视图函数,简称视图,是一个简单的 Python 函数,它接受 Web 请求并且返回 Web 响应。
1.定义视图函数
在Django中,网页和其他内容都是从视图派生而来,每一个视图表现为一个Python函数(function)或者类视图里的方法(method)。下面是一个简单的创建示例。
2.定义视图url
如何去访问这个视图呢?首先需要在该app里去定义url,这个url是在输入网址时我们要填入的参数。
在本app里面去定义url还不行,还必须让工程项目里的url和本app的url关联起来
3.访问视图
有了这个之后,执行python3 manage.py runserver便可以开始进行访问了。
(1)在url后面不加如何参数,访问index函数
(2)在url中加入一个参数5,访问detail函数
注意这里是如何控制传参的
4.关联数据表
上面的视图都是自己定义的单个数据,如果想要输出多个数据,需要和数据表关联起来,下面的视图就和数据表关联起来了
此时我们可以拿到数据库的内容
5.抛出异常
6.关联模板
上面所有的返回值都是直接输出文字的内容,并没有页面的样式。如果想创建页面样式,可以使用 Django 的模板(templates)系统,就可以将页面的设计从代码中分离出来。
稍微改变一下我们的视图函数
此时再去访问页面
页面就好看很多了,并且每一个都是可以直接点击的