Django使用步骤

一、准备阶段

  • 重要的一点:windows上本地网路ip需要再seetings中直接声明,但在unbutu中只需["*"]即可。
    两者均不需要关闭防火墙(unbutu应该没有防火墙)
  1. 查看版本
    python -m django --version
  2. 创建项目
    django-admin startproject mysite
    以上步骤在Pychram中均可省略
  3. 简单测试
    python manage.py runserver
    这里可以更改自己想要的ip及端口
    如:
    python manage.py runserver 8080
  4. 创建app
    python manage.py startapp polls
  5. 在settings中加入此app
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'MMS',    # 后面加入的
]
  1. 在新建的app中编写第一个用于测试的views
from django.http import HttpResponse
def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")
  1. 在主目录的urls.py下添加我们的views的url
from django.contrib import admin
from django.urls import path
from MMS import views as MMS_views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('',MMS_views.index),  # news
]

二、开始加入真正的功能

  1. 在settings中更换mysql的信息
'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'csvt',
        'USER':'root',
        'PASSWORD':'123456',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
  1. 添加驱动
    django 连接mysql默认驱动是MySQLdb,MySQLdb没有支持python3的版本,解决办法如下:
  • 使用pymysql替换MySQLdb
    在django 项目配置文件同目录下的 --init__.py文件中加入以下代码:
import pymysql
pymysql.install_as_MySQLdb()
  • 使用mysqlclient代替MySQLdb
    pip install mysqlclient
  1. 默认开启的某些应用需要至少一个数据表,所以,在使用他们之前需要在数据库中创建一些表。请执行以下命令:
    python manage.py migrate
  2. 创建数据库
    在app的modles.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)
  1. 现在你的 Django 项目会包含 polls 应用。接着运行下面的命令:
    python manage.py makemigrations polls

你将会看到类似于下面这样的输出:
Migrations for ‘polls’:
polls/migrations/0001_initial.py:
- Create model Choice
- Create model Question
- Add field question to choice
通过运行 makemigrations 命令,Django 会检测你对模型文件的修改(在这种情况下,你已经取得了新的),并且把修改的部分储存为一次 迁移。
迁移是 Django 对于模型定义(也就是你的数据库结构)的变化的储存形式 - 没那么玄乎,它们其实也只是一些你磁盘上的文件。如果你想的话,你可以阅读一下你模型的迁移数据,它被储存在 polls/migrations/0001_initial.py 里。别担心,你不需要每次都阅读迁移文件,但是它们被设计成人类可读的形式,这是为了便于你手动修改它们。
Django 有一个自动执行数据库迁移并同步管理你的数据库结构的命令 - 这个命令是 migrate,我们马上就会接触它 - 但是首先,让我们看看迁移命令会执行哪些 SQL 语句。sqlmigrate 命令接收一个迁移的名称,然后返回对应的 SQL:
$ python manage.py sqlmigrate polls 0001

  1. 现在,再次运行 migrate 命令,在数据库里创建新定义的模型的数据表:
    python3 manage.py migrate

以上3、4、5、6合起来如下:

# 初始化 
python manage.py migrate
# 在modles中创建新的表
# 执行一下步骤
python manage.py makemigrations polls
# 将表加入如数据
python manage.py migrate
  1. 还要学习一下python方便的API
    现在让我们进入交互式 Python 命令行,尝试一下 Django 为你创建的各种 API。通过以下命令打开 Python 命令行:
    python manage.py shell

我们使用这个命令而不是简单的使用 “Python” 是因为 manage.py 会设置 DJANGO_SETTINGS_MODULE 环境变量,这个变量会让 Django 根据 mysite/settings.py 文件来设置 Python 包的导入路径。

当你成功进入命令行后,来试试 database API 吧:

from polls.models import Choice, Question  
# Import the model classes we just wrote.

# No questions are in the system yet.
>>> Question.objects.all()
<QuerySet []>

>>> from django.utils import timezone
# 为表添加元素
>>> q = Question(question_text="What's new?", pub_date=timezone.now())
# 保存
>>> q.save()
# Now it has an ID.
>>> q.id
1
# Access model field values via Python attributes.
>>> q.question_text
"What's new?"
>>> q.pub_date
datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=<UTC>)
# Change values by changing the attributes, then calling save().
>>> q.question_text = "What's up?"
>>> q.save()

# objects.all() displays all the questions in the database.
>>> Question.objects.all()
<QuerySet [<Question: Question object (1)>]>

等等。<Question: Question object (1)> 对于我们了解这个对象的细节没什么帮助。让我们通过编辑 Question 模型的代码(位于 polls/models.py 中)来修复这个问题。给 QuestionChoice 增加 __str__() 方法。

polls/models.py

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

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

给模型增加 __str__() 方法是很重要的,这不仅仅能给你在命令行里使用带来方便,Django 自动生成的 admin 里也使用这个方法来表示对象。
**注意:这些都是常规的 Python方法。让我们添加一个自定义的方法,这只是为了演示:
polls/models.py

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)

三、外键与主键

还没有写完(😅😅)

全部评论

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务