1. 创建project

创建app: python3 manage.py startapp polls
注意在创建完project之后,如果需要用PyCharm修改最外层的project name,不能用refactor->rename的方式,可以用mv的形式

2. 创建第一个app

  1. 编辑views.py,views.py里的内容就是给用户看的。HttpResponse只能返回字符串,如果想返回一个文件内的内容,可以用render。

image.png

  1. 让app内的urls.py可以映射到views.py。这里涉及三个参数:
    • 最前面的’’: 在访问web时,需要在url地址后面加的
    • 中间的views.index:表示路由到views.py里的index函数
    • 最后的name=’index’:可以不用加

image.png

  1. 让project里的urls.py可以映射到app里的urls.py。urls.py的两个参数,前面一个指的是访问web时,需要在url地址后面加上polls;后一个参数指的是映射到app的名称和module的名字。

image.png

3.数据库配置

1.在MacOS中安装postgres数据库,具体步骤如下

  1. brew install postgres # 安装postgres数据库
  2. postgres -V # 查看安装是否成功
  3. # 保证每次开机postgres都开启
  4. pg_ctl -D /usr/local/var/postgres start && brew services start postgresql
  5. psql postgres # 进入数据库
  6. \du # 查看数据库有哪些用户
  7. \password username #为用户创建密码,默认密码是空

创建一个新的数据库(注意是数据库,不是数据表),可以采用如下的命令

  1. $ createdb -h localhost -p 5432 -U username(shu) database(aiplatform) # 注意此操作不进入数据库

此时我们用数据库连接工具,例如pgadmin就可以看到创建的数据库
image.png image.png
2.Django默认的数据库是sqlite,如果要使用其他的数据库,需要指定数据库引擎和名字,端口,用户名,密码等等参数。采用本地的postgres数据库,可以进行如下的设置,注意这里的NAME需要填前面创建的数据库名。

  1. DATABASES = {
  2. 'default': {
  3. 'ENGINE': 'django.db.backends.postgresql',
  4. 'NAME': 'aiplatform',
  5. 'HOST': 'localhost',
  6. 'PORT': 5432,
  7. 'USER': 'shu',
  8. 'PASSWORD': 805115148
  9. }
  10. }

4.数据表操作

1.创建Models

  1. from django.db import models
  2. from django.contrib.auth.models import User
  3. class Poll(models.Model):
  4. question = models.CharField(max_length=100)
  5. created_by = models.ForeignKey(User, on_delete=models.CASCADE)
  6. pub_date = models.DateTimeField(auto_now=True)
  7. def __str__(self):
  8. return self.question
  9. class Choice(models.Model):
  10. poll = models.ForeignKey(Poll, related_name='choices', on_delete=models.CASCADE)
  11. choice_text = models.CharField(max_length=100)
  12. def __str__(self):
  13. return self.choice_text
  14. class Vote(models.Model):
  15. choice = models.ForeignKey(Choice, related_name='votes', on_delete=models.CASCADE)
  16. poll = models.ForeignKey(Poll, on_delete=models.CASCADE)
  17. voted_by = models.ForeignKey(User, on_delete=models.CASCADE)
  18. class Meta:
  19. unique_together = ("poll", "voted_by")

Django用模型来表示一个数据表,模型在python中就是一个类,模型里的变量表示的是数据表的一个字段。

需要特别注意的是,一个字段如果是外键(ForeignKey),那么在数据库里面,会在这个字段后面加上一个id来表示字段名,例如Poll这个类的create_by这个字段
image.png
如果一个字段是外键,在新增数据记录的时候,怎么填这个字段呢?需要在后面要加上 _id
image.png
例如上面例子中的Poll这个数据表,本来字段名是poll,但是存到数据库里的是poll_id,因此入库的时候也需要改变

2.添加设置

要将app包含到项目中,需要在INSTALLED_APPS设置中添加对其配置类的引用。

  1. INSTALLED_APPS = [
  2. 'polls.apps.PollsConfig',
  3. 'django.contrib.admin',
  4. 'django.contrib.auth',
  5. 'django.contrib.contenttypes',
  6. 'django.contrib.sessions',
  7. 'django.contrib.messages',
  8. 'django.contrib.staticfiles',
  9. ]

这里的’polls.apps.PollsConfig’表示的就是polls

  1. class PollsConfig(AppConfig):
  2. name = 'polls'

此时就可以开始执行数据库迁移操作了

3.激活Models

  1. python3 manage.py makemigrations polls
  2. python3 manage.py migrate

makemigrations相当于写好了SQL命令(增删改查),migrate相当于去执行SQL命令。
执行完makemigrations之后,可以在app的migrations文件夹里面多了一个0001_initial的文件,它就相当于去写SQL命令。
image.png
值得注意的是,python3 manage.py migrate有可能不成功,此时可以通过如下命令来使前面的sql语句来成功

  1. python3 manage.py migrate --fake myappname zero #重置所有的migrations
  2. python3 manage.py migrate myappname

4.修改字段

如果想修改字段,只需要在Models里面直接修改想要改的字段,然后执行老两句即可

  1. python3 manage.py makemigrations polls
  2. python3 manage.py migrate

可以看到,又会新生成一个migrations文件
image.png

5.新增字段

新增字段和修改字段操作基本相同,只是Django会要求你为新增的字段填一个默认的参数
image.png
选择1,再填入一个参数即可

6.删除字段

直接删除即可,没有什么特别需要强调的

5.ORM操作

1.导入数据表

ORM引入数据库的方式为

  1. python3 manage.py shell
  2. from polls.models import Choice, Question

其中,polls是app名字,Choice和Question是数据表的名字,都是在app里面定义的。值得注意的是,可能存在这种情况,同一个数据表在两个都定义了,那么以managed = True为准,例如下面这种情况要以左边为准
image.pngimage.png

2.增

例如我们要在Question数据表里面新增一个字段,可以用如下操作

  1. from django.utils import timezone
  2. q = Question(question_text="What's new?", pub_date=timezone.now())
  3. q.save()

3.删

例如在AI-Platform里常用到的

  1. from project.models import AI_Project
  2. AI_Project.objects.filter(id="").delete()

4.改

  1. AI_Models.objects.filter(id=model_id).update(standard_job=job_id)

5.查

  1. template_id = AI_Project.objects.get(id=testing_dataset_id)

6.插

Django还有一个很重要的就是插入数据

  1. single_ai_job = ai_job.filter(datasetid=dataset_id).first() # 对象
  2. single_ai_job.insertion_time = timezone.now() # 插入字段
  3. single_ai_job.save() # 保存

6.Admin账号

使用Django Admin可以快速对数据库的各个数据表进行增删查改

1.创建admin用户

  1. python3 manage.py createsuperuser

输入用户名,邮箱,密码,完事儿

2.启动server

  1. python3 manage.py runserver

启动完之后,在地址栏输入http://127.0.0.1:8000/admin/即可访问

3.数据管理

在页面中可以看到所有的App,以及每个App所对应的数据表
image.png
打开其中的一条记录,可以看到数据的详细信息,并且支持在里面直接对数据做修改
image.png

7.视图

一个视图函数,简称视图,是一个简单的 Python 函数,它接受 Web 请求并且返回 Web 响应。

1.定义视图函数

在Django中,网页和其他内容都是从视图派生而来,每一个视图表现为一个Python函数(function)或者类视图里的方法(method)。下面是一个简单的创建示例。
image.png

2.定义视图url

如何去访问这个视图呢?首先需要在该app里去定义url,这个url是在输入网址时我们要填入的参数。
image.png
在本app里面去定义url还不行,还必须让工程项目里的url和本app的url关联起来
image.png

3.访问视图

有了这个之后,执行python3 manage.py runserver便可以开始进行访问了。
(1)在url后面不加如何参数,访问index函数
image.png
(2)在url中加入一个参数5,访问detail函数
image.png
注意这里是如何控制传参的
image.png
image.png

4.关联数据表

上面的视图都是自己定义的单个数据,如果想要输出多个数据,需要和数据表关联起来,下面的视图就和数据表关联起来了
image.png
此时我们可以拿到数据库的内容
image.png

5.抛出异常

有可能定义的视图函数有报错,此时可以将异常抛出
image.png

6.关联模板

上面所有的返回值都是直接输出文字的内容,并没有页面的样式。如果想创建页面样式,可以使用 Django 的模板(templates)系统,就可以将页面的设计从代码中分离出来。
image.png
稍微改变一下我们的视图函数
image.png
此时再去访问页面
image.png
页面就好看很多了,并且每一个都是可以直接点击的
image.png

8.编写第一个app