Django入门基础详解
本次使用django版本2.1.2
安装django
安装最新版本
pip install django
安装指定版本
pip install django==1.10.1
查看本机django版本
pip show django
创建项目
创建一个项目文件夹(如:django),在此文件夹中打开Powershell 或 打开DOS切换到此目录执行如下命令:
django-admin startproject my_site
- django-admin startproject:是固定的创建项目命令
- my_site:是创建的项目名称,自己随意取名
当执行创建项目名称后django会自动生成那些必要的文件,也可以执行django-admin startproject Blog .
创建一个Python的包。
启动项目
进入django/my_site文件执行以下命令:
django manage.py runserver
D:\xuexi\python\django\my_site>
>>> python manage.py runserver
Performing system checks...System check identified no issues (0 silenced).You have 15 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.October 14, 2018 - 11:48:52
Django version 2.1.2, using settings 'my_site.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
也可以指定端口:python manage.py runserver 127.0.0.1:8081
根据运行后的提示访问http://127.0.0.1:8000
更改Django默认语言
上面访问后页面是英语感觉看着不习惯,后面会讲到管理页面也是英语,如下我们来更改配置实现中文展示:
进入D:\xuexi\python\django\my_site\my_site\settings.py搜索
LANGUAGE_CODE
大概长这样:## 其它配置代码...LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC'## 其它配置代码...
变更为:
## 其它配置代码...LANGUAGE_CODE = 'zh-hans' # 把英文改为中文TIME_ZONE = 'Asia/Shanghai' # 把国际时区改为中国时区## 其它配置代码...
保存文件 -> 刷新浏览器
创建应用
项目已经创建好了,网站也有了,接下来要实现网站的具体功能。在Django中,通常把这些功能称为“应用”(application)。
进入刚才创建的项目目录中,即manage.py
文件所在目录,然后执行下面代码:
D:\xuexi\python\django\my_site>
>>> python manage.py startapp blog
执行后的目录结构:
blog就是在项目my_site中新建的项目。当新的应用创建后,Django会自动在这个应用中增加一些文件。目前这已经是一个相对完善的网站结构。
目录作用详解
django常用命令
详解地址1
详解地址2
网站配置(应用注册到项目)
前面仅仅是创建了应用,还没有将应用注册到本项目中,因此暂时不能访问。
在Django项目中,在./my_site/setting.py
文件中进行信息注册,setting.py
常用配置如下:
DEBUG: 其值为True 或者False,在开发过程中需要设置成True,在测试功能时,Django能够显示详细的报错信息–这是“开发模式”。如果将项目部署到真正要对外发布的服务器上,我们称之为“生产环境”,必须将其值修改为False,从而避免暴露项目的内部信息。
ALLOWED_HOSTS: 在DEBUG为True时,其值为空。当部署到生产环境中时,要把主域名填写到这里,才能通过域名访问到本站。
INSTALLED_APPS: 这是一个非常重要的配置项,所有的应用只有写到这里才能生效。默认情况下,已经有了一些应用,比如
django.contrib.admin
就是针对项目后台管理的应用。如我们前面新建了一个blog应用,那我们就需要把应用配置到这里,如下:INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','blog', # <---------------------新增的应用添加到下方格式跟上面其他应用一样,'xxx',]
DATAVASES: 在这里可以配置数据库。Django能够支持多种数据库,如常见的MySQL、Oracle等。默认配置SQLite,因为这个数据库小巧灵活,还是Python标准库所支持的。
LANGUAGE_CODE: 设置项目的语言,一般情况下可以不用修改,如果非要用汉语,则设置为LANGUAGE_CODE=‘zh-hans’(注意不是’zh-cn’)。
TIME_ZONE: 设置时区,通常使用东八区,设置为’Asia/Shanghai’.
数据模型类(迁移数据库)
利用Django开发网站系统,一般情况下,要先编写数据模型,就是在./blog/models.py
中写一个类,这个类与数据库表具有对应关系,Django中我们不需要执行sql语句来创建表,它已经帮我们做了一些事情。Django 把那一套数据库的语法转换成了 Python 的语法形式,我们只要写 Python 代码就可以了,Django 会把 Python 代码翻译成对应的数据库操作语言。用更加专业一点的说法,就是 Django 为我们提供了一套 ORM(Object Relational Mapping)系统。
blog/models.py
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import Userclass BlogArticles(models.Model):"""Django 要求模型必须继承 models.Model 类。CharField 指定了分类名 title 的数据类型,CharField 是字符型,CharField 的 max_length 参数指定其最大长度,超过这个长度的分类名就不能被存入数据库。当然 Django 还为我们提供了多种其它的数据类型,如日期时间类型 DateTimeField、整数类型 IntegerField 等等。Django 内置的全部类型可查看文档:https://docs.djangoproject.com/en/1.10/ref/models/fields/#field-types"""title = models.CharField(max_length=300) # 设置为字符类型最大输入长度为30author = models.ForeignKey(User,related_name='blog_posts, on_delete=models.CASCADE') # 一对多关系(一个用户可以创建多篇文章),on_delete在Django2.x以上必须写这个参数(大概意思是删除这个外键时删除其他表对应的数据)"""这里 User 是从 django.contrib.auth.models 导入的。django.contrib.auth 是 Django 内置的应用,专门用于处理网站用户的注册、登录等流程,User 是 Django 为我们已经写好的用户模型。这里我们通过 ForeignKey 把文章和 User 关联了起来。因为我们规定一篇文章只能有一个作者,而一个作者可能会写多篇文章,因此这是一对多的关联关系,和 Category 类似。"""body = models.TextField() # 设置为文本字段publish = models.DateTimeField(default=timezone.now) # 默认本地时间class Meta:ordering = ('-publish',) # 设置BlogArticles的实例对象按照publish字段的倒叙显示def __str__(self):return self.title
BlogArticles
就是一个标准的 Python 类,它继承了models.Model类,类名为 BlogArticles 。BlogArticles
类有一个属性 title,它是models.CharField的一个实例。
这样,Django 就可以把这个类翻译成数据库的操作语言,在数据库里创建一个名为 BlogArticles
的表格,可以看出从 Python 代码翻译成数据库语言时其规则就是一个 Python 类对应一个数据库表格,类名即表名,类的属性对应着表格的列,属性名即列名。
BlogArticles
的数据模型编写好了,将来的数据表的基本结构就是按照上述各字段及其属性而定的,接下来根据数据模型建立数据库表,执行以下命令:
开始迁移
1、在./my_site/manage.py
执行python manage.py makemigrations
命令
D:\xuexi\python\django\my_site (master)
>>> python manage.py makemigrations
Migrations for 'blog':blog\migrations\0001_initial.py- Create model BlogArticles
- 当我们执行了
python manage.py makemigrations
后,Django 在 blog 应用的 migrations 目录下生成了一个0001_initial.py
文件,这个文件是 Django 用来记录我们对模型做了哪些修改的文件。目前来说,我们在models.py
文件里创建了1
个模型类,Django 把这些变化记录在了 0001_initial.py 里
我们也可以使用manage.py
来查看以下转换后的预执行内如:
D:\xuexi\python\django\my_site (master)
>>> python manage.py sqlmigrate blog 0001
BEGIN;
--
-- Create model BlogArticles
--
CREATE TABLE "blog_blogarticles" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "title" varchar(300) NOT NULL, "body" text NOT NULL, "publish" datetime NOT NULL, "author_id" integer NOT NULL REFERENCES "auth_user" ("id") DEFERRABLE INITIALLY DEFERRED);
CREATE INDEX "blog_blogarticles_author_id_ed798e23" ON "blog_blogarticles" ("author_id");
COMMIT;
可以看到转换后其实就是一些建表语句而已。
2、继续执行python manage.py migrate
命令
D:\xuexi\python\django\my_site (master)
>>> python manage.py migrate
Operations to perform:Apply all migrations: admin, auth, blog, contenttypes, sessions
Running migrations:Applying contenttypes.0001_initial... OKApplying auth.0001_initial... OKApplying admin.0001_initial... OKApplying admin.0002_logentry_remove_auto_add... OKApplying admin.0003_logentry_add_action_flag_choices... OKApplying contenttypes.0002_remove_content_type_name... OKApplying auth.0002_alter_permission_name_max_length... OKApplying auth.0003_alter_user_email_max_length... OKApplying auth.0004_alter_user_username_opts... OKApplying auth.0005_alter_user_last_login_null... OKApplying auth.0006_require_contenttypes_0002... OKApplying auth.0007_alter_validators_add_error_messages... OKApplying auth.0008_alter_user_username_max_length... OKApplying auth.0009_alter_user_last_name_max_length... OKApplying blog.0001_initial... OKApplying sessions.0001_initial... OK
- 第一步只是告诉了 Django 我们做了哪些改变,为了让 Django 真正地为我们创建数据库表,接下来又执行了
python manage.py migrate
命令。Django 通过检测应用中migrations
目录下的文件,得知我们对数据库做了哪些操作,然后它把这些操作翻译成数据库操作语言,从而把这些操作作用于真正的数据库(说白了就是这两个步骤把我们在models.py里面写的python语句翻译成sql并执行)。
3、使用管理打开我们项目中的db.sqlite3
文件:
Firefox安装sqlite工具插件(注意安装插件时使用Firefox打开链接)
从上面看出django已成功帮我创建了数据表。
发布博客文章
1、首先执行python manage.py createsuperuser
创建超级管理员
D:\xuexi\python\django\my_site (master)
>>> python manage.py createsuperuser
用户名 (leave blank to use 'xxxx'): admin
电子邮件地址: xxx@163.com
Password:
Password (again):
这个密码太常见了。
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.
2、执行python manage.py runserver
启动服务
D:\xuexi\python\django\my_site (master)
>>> python manage.py runserver
Performing system checks... System check identified no issues (0 silenced).
October 16, 2018 - 22:25:14
Django version 2.1.2, using settings 'my_site.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
3、使用浏览器访问http://localhost:8000/admin/
,输入前面创建的超级管理员账户和密码。
登陆后大概长这样:
界面所显示的用户和组都是应用中默认的。
4、在后台注册自己创建的模型,在以下路径./django/my_site/blog/admin.py
文件中添加以下代码
from django.contrib import admin# Register your models here.from django.contrib import admin
from .models import BlogArticles # 将BlogArticles引入到当前环境
admin.site.register(BlogArticles) # 将BlogArticles注册到admin
再次刷新浏览器,查看我们新注册的模型已经可以在后台管理页面看到了,如下图:
点击增加一篇文章
sqlite中也可以看到我们在管理平台看到的数据了
5、添加文章后页面显示看着挺单一,现在来改变admin.py
让页面编的不在那么单调,具体代码如下:
from django.contrib import admin# Register your models here.from django.contrib import admin
from .models import BlogArticles # 将BlogArticles引入到当前环境class BlogArticlesAdmin(admin.ModelAdmin): #list_display = ("title", "author", "publish") # 管理页面需要展示的字段list_filter = ("publish", "author") # 设置(页面右侧)可以publish 和 author过滤search_fields = ("title", "body") # 设置页面支持title 和 body搜索raw_id_fields = ("author",)date_hierarchy = "publish" # 设置按可以按时间选择ordering = ['publish', 'author'] # 设置以publish 和 author来进行排序admin.site.register(BlogArticles, BlogArticlesAdmin) # 将BlogArticles注册到admin
重新刷新页面:
Django入门基础详解相关推荐
- html入门基础(详解)
html入门基础(详解) 一.HTML 1.HTML:是一种用于创建网页的超文本标记语言(Hyper Text Markup Language) "超文本"就是指页面可以包含图片, ...
- Redis入门基础详解
Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久 ...
- javaWeb(入门基础详解)
Servlet 1,servlet介绍 servlet是一项动态web资源开发技术. 运行在服务器端. 作用:处理业务逻辑,生成动态的内容,返回 ...
- Matlab入门基础详解
此文针对第一次接触matlab的同学,总结一些简单matlab应用/语法,因为博主主要用matlab打数学建模竞赛(刚接触- -),所以所有matlab应用主要针对竞赛.博主目前想从事算法.机器学习之 ...
- CSS入门基础详解——笔记、案例
CSS入门学习 一.CSS简介 1.什么是css css:层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记 ...
- python 快速排序_小白入门知识详解:Python实现快速排序的方法(含实例代码)...
前言: 今天为大家带来的内容是:小白入门知识详解:Python实现快速排序的方法(含实例代码)希望通过本文的内容能够对各位有所帮助,喜欢的话记得点赞转发收藏不迷路哦!!! 提示: 这篇文章主要介绍了P ...
- 视频教程-FPS游戏逆向与安全+UE4引擎基础详解-其他
FPS游戏逆向与安全+UE4引擎基础详解 想把自己的知识传播出去,让更多人学习到 苏瑞兵 ¥188.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP订阅课程,领取 ...
- 主线剧情03-NXP-i.MX系列的u-boot移植基础详解
u-boot 移植基础详解 本文系广泛撷取.借鉴和整理(相关的内容在网络上有很多,但很多相互抄,或者是版本太老,或者就是不通用的非常有平台针对性的步骤,碎片化泛滥,甚至就是有待分拣的垃圾厂,当然也有一 ...
- vue 单相绑定_Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)...
Vuejs第一篇之入门教程详解(单向绑定.双向绑定.列表渲染.响应函数) 2018-12-30 什么是组件? 组件(Component)是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素 ...
最新文章
- 尼康单反相机测试软件,尼康D4S数码单反相机专题测试
- 面试lua笔试题各种坑
- ubuntu12.04 安装中文输入法
- Eclipse修改web项目的jdk编译版本
- 服务器上的文件怎么取名,给新的服务器取名你会取神马?
- Java访问对象的属性和行为
- 《妖猫传》大唐盛世背后那些事
- Windows 10 IIS所有的html返回空白
- 阿里巴巴Python工程师面试题之一:单引号,双引号,三引号的区别
- day 59Bootstrap自带图表和fontawesome图标 导航和导航条 Bootstrap常用插件 sweetalert插件介绍...
- Mac使用ssh公钥免密登录服务器
- 奇葩属性:layout_weight 的解释及使用
- cooleditpro批量加速文件_Python玩转阿里云OSS对象存储,批量转存markdown和html图片
- 使用Petalinux定制自己的linux系统
- Android闹钟TimePicker,android – TimePicker getHours(),API 15中的getMinutes
- iOS打包ipa无签名打包企业签
- Python爬虫——爬取豆瓣VIP书籍信息并存入数据库
- 毕业了,开始新的生活!
- 消防应急通讯平台设计
- 声网连麦+直播+视频+游戏“史上最强”社交直播方案 打造陌陌全新8.0改版