1 什么是Django
Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M(Model),视图V(View)和模版T(Template)。
使用这种架构,程序员可以方便、快捷地创建高品质、易维护、数据库驱动的应用程序。
在Django框架中,还包含许多功能强大的第三方插件,使得Django具有较强的可扩展性。
Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以“插件”形式服务于整个框架。
本文操作环境:
Python 3.7.1 (官网下载https://www.python.org/downloads/)
Django 3.0.2
(pip install django官网pip下载https://pypi.org/project/pip/#files)
2 选择创建项目路径
2.1、创建mysite项目名和blog应用
选择项目路径有两种情况:
1.打开cmd,cd+路径。(打开cmd默认是C盘的,一般情况创建项目都不在C盘,例如在D:/test。那么首先要切换到D盘,终端先输入D:回车,再cd test回车)。
C:\Users\admin>D:D:\>cd testD:\test>
2.同样是D:/test作为项目目录,打开D盘下的test文件夹,鼠标右键空白处在弹出的选项中点击 在此处打开命令窗口 (这样就直接在cmd打开test路径了)。
D:\test>
3 创建项目
注意是在D盘test目录下输入命令,test作为项目目录。
# 创建mysite项目D:\test>django-admin startproject mysite# 切换到mysite目录D:\test>cd mysite# 创建blog应用D:\test\mysite>python manage.py startapp blog
3.1、项目目录结构为:
3.2、项目目录介绍:
manage.py:Django项目里面的工具,通过它可以调用django shell和数据库等。 mysite/ --- settings.py:包含了项目的默认设置,数据库信息,调试标志 ,还有其他设置,比如静态文件、媒体文件的根目录等。 --- urls.py :负责把URL 配置 模式映射到应用程序。 --- wsgi.py:用于项目部署。 blog / --- admin.py:django 自带admin后面管理,将models.py 中表映射到后台。 --- apps.py:blog 应用的相关配置。 --- models.py:Django 自带的ORM ( 对象关系映射 ) ,用于设计数据库表。 --- tests.py:用于编写Django单元测试。 --- veiws.py :视图文件,用于编写功能的主要处理逻辑。
3.3、setting.py配置文件,添加blog应用:
# Application definitionINSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', #新增的blog应用 由python manage.py startapp blog 生成的blog应用 'blog',]
4 初始化admin后台数据库
4.1、Python 自带SQLite3数据库,Django默认使用SQLite3数据库,如果使用其它数据库请在settings.py文件中设置
# Database# https://docs.djangoproject.com/en/3.0/ref/settings/#databasesDATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), }}
# Django使用mysql数据库设置DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'blog', 'USER':'root', 'PASSWORD':'123456', 'HOST':'127.0.0.1', 'PORT':'3306', }}
4.2、Django默认帮我们做了很多事情,比如User、Session 这些都需要创建表来存储数据,Django已经把这些模块帮我们准备好了,我们只需要执行数据库同步,把相关表生成出来即可:
D:\test\mysite>python manage.py migrateOperations to perform: Apply all migrations: admin, auth, contenttypes, sessionsRunning migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying auth.0010_alter_group_name_max_length... OK Applying auth.0011_update_proxy_permissions... OK Applying sessions.0001_initial... OK
4.3、创建超级管理员帐号,登录admin后台,必须要有帐号
D:\test\mysite>python manage.py createsuperuserUsername (leave blank to use 'admin'): admin # 管理员帐号Email address: [email protected] # email,任意输入一个就行Password: # 密码,输入的时候不显示出来,其实输入了Password (again): # 重复密码#下面这段提示意思是,因为我输入的密码是admin,过于简单,测试阶段可以用简单密码,实战就需要复杂点,按要求设置,最少8个字符The password is too similar to the username. This password is too short. It must contain at least 8 characters.This password is too common.#询问你是否跳过密码验证,输入y回车即可Bypass password validation and create user anyway? [y/N]: ySuperuser created successfully.
5 启动项目,访问admin后台
D:\test\mysite>python manage.py runserverWatching for file changes with StatReloaderPerforming system checks...System check identified no issues (0 silenced).January 08, 2020 - 09:58:29Django version 3.0.2, using settings 'mysite.settings'Starting development server at http://127.0.0.1:8000/Quit the server with CTRL-BREAK.
5.1、浏览器访问:http://127.0.0.1:8000
默认是英文版本,设置中文后台与时区:
setting.py文件下设置。
LANGUAGE_CODE = 'zh-hans'TIME_ZONE = 'Asia/Shanghai'
5.2、访问Admin后台:http://127.0.0.0:8000/admin,通过前面创建的超级管理员账号登录
5.3、登录之后进入到后台主页面
到此,准备工作结束。
6 设计Model(设计数据库表)
6.1、设计blog表
打开blog目录下的models.py文件,该类下的属性对应数据库字段。
from django.db import models# Create your models here.class BlogsPost(models.Model): title = models.CharField(max_length = 150) # 博客标题 body = models.TextField() # 博客正文 timestamp = models.DateTimeField() # 创建时间
6.2、再次执行数据库同步,因为刚新增了数据模型表
会提示生成了0001_initial.py文件,该文件在blog应用下的_py_cache_文件下。
D:\test\mysite>python manage.py makemigrations blogMigrations for 'blog': blog\migrations\0001_initial.py - Create model BlogsPost
6.3、把刚生成的0001_initial.py文件更新到数据库
D:\test\mysite>python manage.py migrateOperations to perform:Apply all migrations: admin, auth, blog, contenttypes, sessionsRunning migrations:Applying blog.0001_initial... OK
6.4、通过Admin管理
通过Admin后台来管理blog表数据。打开blog应用下的admin.py 文件。
from django.contrib import adminfrom blog.models import BlogsPost# Register your models here.class BlogsPostAdmin(admin.ModelAdmin): list_display = ['title', 'body', 'timestamp']admin.site.register(BlogsPost, BlogsPostAdmin)
6.5、登录Admin后台添加blog
再次启动项目(python manage.py runserver),访问:http://127.0.0.1:8000/admin。
Django后台主页面上会多出Blog应用。
点击Add添加数据。
Time后面获取当前时间默认是不对的,相差了8小时。
在你的Django项目中setting.py找到TIME_ZONE配置,可以看到默认的是"UTC",这时需要把他更改为我们所在的时区,进行如下设置:
TIME_ZONE = 'Asia/Shangha
就ok了
6.6、点击SAVE 按钮保存,博客编写完成。
到此,数据部分已经搞定。
7 创建视图
7.1、创建视图函数
打开blog应用下的views.py文件:
from django.shortcuts import renderfrom blog.models import BlogsPost# Create your views here.def blog_index(request): blog_list = BlogsPost.objects.all() # 获取所有数据 return render(request,'index.html', {'blog_list':blog_list}) # 返回index.html页面
7.2、创建视图对应的模版
在blog应用下创建templates目录(blog/templates/),在目录下创建首页文件index.html,内容:(blog_list为视图view.py定义的变量)。
{% for blog in blog_list %} <h2>{{ blog.title }}h2> <p>{{ blog.timestamp }}p> <p>{{ blog.body }}p>{% endfor %}
循环视图view.py文件渲染到页面的blog_list集合,显示标题,创建时间和正文。
blog_list = BlogPost.objects.all(),获取数据库里面表中所有的BlogPost对象。
render返回一个页面(index.html),顺带把数据库中查询出来的所有博客内容(blog_list)也一并返回。
7.3、创建blog应用的url模式
在mysite/urls.py文件里添加blog的url:
from django.contrib import adminfrom django.urls import pathfrom blog import viewsurlpatterns = [ path('admin/', admin.site.urls), path('blog/', views.blog_index),]
7.4、 再次终端cmd启动服务 cmd命令python manage.py runserver,访问(http://127.0.0.1:8000/blog/)。
到此,项目开发完成
(完)
看完本文有收获?请转发朋友圈分享给更多人吧
关注「Python家庭」一起轻松学Python
扫码关注我们
原创不易,有帮助点个 “在看” 呗