pythonWeb-Django入门(随官方文档)-白话入门

Django

准备:

作者编辑环境:Pycharm python3.7 Django3.1.1

创建一个Django 项目,并且创建一个应用 例如:

–python manage.py startapp polls

创建一个应用 polls

1.1 连接mysql

(1)在项目根目录中的__init__.py中加入
import pymysql

pymysql.version_info = (1, 4, 13, "final", 0)
pymysql.install_as_MySQLdb()
(2) 在项目根目录中的setting.py中配置DATABASES变量,例:

注:安装需求更改时区 TIME_ZONE = ‘Asia/Shanghai’

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',#选择mysql
        'NAME': 'Django',#数据库表名
        'HOST': '127.0.0.1',#数据库主机名
        'PORT': '3306',#数据库端口号
        'USER': 'root',#连接数据库用户名
        'PASSWORD': ''#密码

    }
}
(3)在manange.py目录控制台下运行
python manage.py migrate

官方说明:这个 migrate 命令检查 INSTALLED_APPS 设置,为其中的每个应用创建需要的数据表,至于具体会创建什么,这取决于你的 mysite/settings.py 设置文件和每个应用的数据库迁移文件。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

理解:可以通过创建数据模型的方法描述数据库,从而自动生成适配多种数据库的SQL语句,并应用。

根据配置自动创建对应的数据库(类似将不同数据库的标准统一成一种数据描述方式)

在这里插入图片描述

(4)创建数据模型

描述所需的数据模型 例:

​ 在这个投票应用中,需要创建两个模型:问题 Question 和选项 ChoiceQuestion 模型包括问题描述和发布时间。Choice 模型有两个字段,选项描述和当前得票数。每个选项属于一个问题。

polls/models.py

from django.db import models


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField("date published")


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)
(5)激活模型
  • 先得把 polls 应用安装到我们的项目里

    项目名称/setting.py

    INSTALLED_APPS = [
        'polls.apps.PollsConfig',#安装polls
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
    ] 
    
  • 运行 –python manage.py makemigrations polls

    结果过:

    Migrations for ‘polls’:
    polls\migrations\0001_initial.py

    ​ Create model Question

      Create model Choice
    

    生成数据模型 为 polls\migrations\0001_initial.py

    在这里插入图片描述

    • 运行 py manage.py sqlmigrate polls 0001

      查看定义的模型:

      在这里插入图片描述

  • 运行 py manage.py migrate

    应用到数据库:

    (base) D:\items\python\pythonWeb\mysist02>py manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, polls, sessions Running migrations: Applying polls.0001_initial... OK

    结果:

    polls_question表

    在这里插入图片描述

    polls_choice表

    在这里插入图片描述

(6)表操作实例:

控制台运行 python manage.py shell
作用:进入如下的python命令行交互模式
已下内容出现 >>> 即需要在这么模式下进行


>>> from polls.models import Choice, Question #导入我们刚写的数据模型类

>>> Question.objects.all()#查看现在的Question模型的实例
<QuerySet []>#目前为0个


>>> from django.utils import timezone #导入巴拉巴拉类
>>> q = Question(question_text="What's new?", pub_date=timezone.now())
#创建一个Question模型的实例

>>> q.save() # 调用save方法保存数据
#查看实例的数据
>>> q.id
1
>>> q.question_text
"What's new?"
>>> q.pub_date
datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=<UTC>)

#修改数据并保存
>>> q.question_text = "What's up?"
>>> q.save()

# 查看所有的Question模型的实例
>>> Question.objects.all()
<QuerySet [<Question: Question object (1)>]>

在这里插入图片描述

(7) 给 QuestionChoice 增加 __str__() 方法

from django.db import models

class Question(models.Model):
    # ...
    def __str__(self):
        return self.question_text

class Choice(models.Model):
    # ...
    def __str__(self):
        return self.choice_text

再定义一个方法:

import datetime

from django.db import models
from django.utils import timezone


class Question(models.Model):
    # ...
    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

(8)继续操作数据库表玩玩:

>>> from polls.models import Choice, Question
>>> Question.objects.all()
<QuerySet [<Question: What's up?>]>

           #按照字段查询
>>> Question.objects.filter(id=1)#查询id=1的数据
<QuerySet [<Question: What's up?>]>
>>> Question.objects.filter(question_text__startswith='What')
#查询字段有What开始的数据
<QuerySet [<Question: What's up?>]>

>>> from django.utils import timezone
>>> current_year = timezone.now().year #获取现在的年份
>>> Question.objects.get(pub_date__year=current_year)#查询年份为今年的数据
<Question: What's up?>

#获得id=2的数据(找不到,抛出异常)
>>> Question.objects.get(id=2)
Traceback (most recent call last):
    ...
DoesNotExist: Question matching query does not exist.


           #获得第一条数据
>>> Question.objects.get(pk=1)
<Question: What's up?>

#确保之前编写的方法可以执行
>>> q = Question.objects.get(pk=1)
>>> q.was_published_recently()
True

# 查询以他的主键为外键的choice中的数据
>>> q.choice_set.all()
<QuerySet []>

# 以他为外键创建choice表数据
>>> q.choice_set.create(choice_text='Not much', votes=0)
<Choice: Not much>
>>> q.choice_set.create(choice_text='The sky', votes=0)
<Choice: The sky>
>>> c = q.choice_set.create(choice_text='Just hacking again', votes=0)

现在表长这样:

在这里插入图片描述

>>> c.question #访问外键实例(查看该选项的问题实例) 
<Question: What's up?>

>>> q.choice_set.all()#查看以他为外键的choice实例(查看问题的答案实例)
<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>
>>> q.choice_set.count()#查看以他为外键的实例个数(看问题有多少答案)
3

>>> Choice.objects.filter(question__pub_date__year=current_year)
#根据主键的字段进行条件 查询
<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>

#拿到答案以Just hacking开始的实例
>>> c = q.choice_set.filter(choice_text__startswith='Just hacking')
>>> c.delete()#删!

这会的数据表:

在这里插入图片描述

未完待续…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值