当前位置: 首页 > 工具软件 > Django > 使用案例 >

django入门(超详细)

穆浩皛
2023-12-01

学习目标:django初阶

  • 创建项目
  • 开发服务器
  • 创建投票应用程序
  • 写下你的第一个视图
  • 数据库设置
  • 创建模型
  • 激活模型
  • 使用 API
  • 介绍 Django 管理员

学习内容:

快速安装django:

在此之前,确定已经安装完成python

 pip install Django

查看django的版本号

python -m django --version

创建项目

django-admin satrtproject 项目名称

成功创建

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py

manage.py:一个命令行实用程序,可让您以各种方式与此 Django 项目进行交互。您可以阅读 django-admin 和 manage.pymanage.py中的所有详细信息。
内部mysite/目录是您项目的实际 Python 包。它的名称是 Python 包名称,您需要使用它来导入其中的任何内容(例如mysite.urls)。
mysite/init.py: 一个空文件,告诉 Python 这个目录应该被认为是一个 Python 包。如果您是 Python 初学者,请阅读官方 Python 文档中有关包的更多信息。
mysite/settings.py:此 Django 项目的设置/配置。 Django 设置会告诉你设置是如何工作的。
mysite/urls.py:这个 Django 项目的 URL 声明;由 Django 驱动的站点的“目录”。您可以在URL dispatcher中阅读有关 URL 的更多信息。
mysite/wsgi.py: 为您的项目提供服务的 WSGI 兼容 Web 服务器的入口点。有关更多详细信息,请参阅如何使用 WSGI进行部署。

开发服务器

python manage.py runserver

创建应用程序

python manage.py startapp 应用程序名称

写出第一个试图view

在views.py中编写

from django.http import HttpResponse
def index(request):

return httpResponse(“Hello,word”)

这是 Django 中最简单的视图。如果想看见效果,我们需要将一个 URL 映射到它——这就是我们需要 URLconf 的原因了。
为了创建 URLconf,请在 polls 目录里新建一个 urls.py 文件。你的应用目录现在看起来应该是这样:

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    urls.py
    views.py

在 polls/urls.py 中,输入如下代码:

from django.urls import path

from . import views 
urlpatterns = [
	path('',views.idnex,name='index'),#这个name是映射到views.index

]

下一步是要在根 URLconf 文件中指定我们创建的 polls.urls 模块。在 mysite/urls.py 文件的 urlpatterns 列表里插入一个 include(), 如下:

from django.contrib import admin
from django.urls import include,path
urlpatterns = [
	path('polls/',include('polls.urls')),
	path('admin/',admin.site.urls),
]

执行
python manage.py runserver #验证路由是否修改成功

数据库配置

现在打开 项目/settings.py 这是一个包含Django项目设置的python模块

  1. 通常sqlite为默认数据库
  2. 也可以使用自定义数据库(mysql、Oracle…)

sqlite数据库

DATABASES = {
   'default': {
       'ENGINE': 'django.db.backends.sqlite3',
       'NAME': 'mydatabase',
   }
}

Mysql数据库或者其他数据

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mydatabase',
        'USER': 'mydatabaseuser',
        'PASSWORD': 'mypassword',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

创建model.py类

通过定义还需要将app名称放入settings.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)

在文件mysite/settings.py中子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’,
‘app名称’
]

python manage.py makemigrations polls


API

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

>>> from polls.models import Choice, Question  # 导入相应的数据类

#系统中还没有问题。
>>> Question.objects.all()  #查找到question中的所有数据,返回一个对象
<QuerySet []>

#创建一个新的数据
# Support for time zones is enabled in the default settings file, so
# Django expects a datetime with tzinfo for pub_date. Use timezone.now()
# instead of datetime.datetime.now() and it will do the right thing.
>>> from django.utils import timezone
>>> q = Question(question_text="What's new?", pub_date=timezone.now())

# Save the object into the database. You have to call save() explicitly.
>>> 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)>]>

在model.py中还存在很多内置的方法
例如:

def unicode(self):

return self.username

class Meta():

db_table=“表名”

 类似资料: