django入门(超详细)
学习目标:django初阶创建项目开发服务器创建投票应用程序写下你的第一个视图数据库设置创建模型激活模型使用 API介绍 Django 管理员学习内容:查看django的版本号python -m django --version创建项目django-admin satrtproject 项目名称成功创建mysite/manage.pymysite/__init__.pysettings.py
学习目标: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模块
- 通常sqlite为默认数据库
- 也可以使用自定义数据库(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=“表名”
更多推荐
所有评论(0)