本次使用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默认语言

上面访问后页面是英语感觉看着不习惯,后面会讲到管理页面也是英语,如下我们来更改配置实现中文展示:

  1. 进入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'  # 把国际时区改为中国时区## 其它配置代码...
    
  2. 保存文件 -> 刷新浏览器

创建应用

项目已经创建好了,网站也有了,接下来要实现网站的具体功能。在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入门基础详解相关推荐

  1. html入门基础(详解)

    html入门基础(详解) 一.HTML 1.HTML:是一种用于创建网页的超文本标记语言(Hyper Text Markup Language) "超文本"就是指页面可以包含图片, ...

  2. Redis入门基础详解

    Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久 ...

  3. javaWeb(入门基础详解)

    Servlet     1,servlet介绍         servlet是一项动态web资源开发技术.         运行在服务器端.         作用:处理业务逻辑,生成动态的内容,返回 ...

  4. Matlab入门基础详解

    此文针对第一次接触matlab的同学,总结一些简单matlab应用/语法,因为博主主要用matlab打数学建模竞赛(刚接触- -),所以所有matlab应用主要针对竞赛.博主目前想从事算法.机器学习之 ...

  5. CSS入门基础详解——笔记、案例

    CSS入门学习 一.CSS简介 1.什么是css css:层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记 ...

  6. python 快速排序_小白入门知识详解:Python实现快速排序的方法(含实例代码)...

    前言: 今天为大家带来的内容是:小白入门知识详解:Python实现快速排序的方法(含实例代码)希望通过本文的内容能够对各位有所帮助,喜欢的话记得点赞转发收藏不迷路哦!!! 提示: 这篇文章主要介绍了P ...

  7. 视频教程-FPS游戏逆向与安全+UE4引擎基础详解-其他

    FPS游戏逆向与安全+UE4引擎基础详解 想把自己的知识传播出去,让更多人学习到 苏瑞兵 ¥188.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP订阅课程,领取 ...

  8. 主线剧情03-NXP-i.MX系列的u-boot移植基础详解

    u-boot 移植基础详解 本文系广泛撷取.借鉴和整理(相关的内容在网络上有很多,但很多相互抄,或者是版本太老,或者就是不通用的非常有平台针对性的步骤,碎片化泛滥,甚至就是有待分拣的垃圾厂,当然也有一 ...

  9. vue 单相绑定_Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)...

    Vuejs第一篇之入门教程详解(单向绑定.双向绑定.列表渲染.响应函数) 2018-12-30 什么是组件? 组件(Component)是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素 ...

最新文章

  1. 尼康单反相机测试软件,尼康D4S数码单反相机专题测试
  2. 面试lua笔试题各种坑
  3. ubuntu12.04 安装中文输入法
  4. Eclipse修改web项目的jdk编译版本
  5. 服务器上的文件怎么取名,给新的服务器取名你会取神马?
  6. Java访问对象的属性和行为
  7. 《妖猫传》大唐盛世背后那些事
  8. Windows 10 IIS所有的html返回空白
  9. 阿里巴巴Python工程师面试题之一:单引号,双引号,三引号的区别
  10. day 59Bootstrap自带图表和fontawesome图标 导航和导航条 Bootstrap常用插件 sweetalert插件介绍...
  11. Mac使用ssh公钥免密登录服务器
  12. 奇葩属性:layout_weight 的解释及使用
  13. cooleditpro批量加速文件_Python玩转阿里云OSS对象存储,批量转存markdown和html图片
  14. 使用Petalinux定制自己的linux系统
  15. Android闹钟TimePicker,android – TimePicker getHours(),API 15中的getMinutes
  16. iOS打包ipa无签名打包企业签
  17. Python爬虫——爬取豆瓣VIP书籍信息并存入数据库
  18. 毕业了,开始新的生活!
  19. 消防应急通讯平台设计
  20. 声网连麦+直播+视频+游戏“史上最强”社交直播方案 打造陌陌全新8.0改版

热门文章

  1. matlab字母上横线,为什么运行后是一条横线啊???
  2. iOS开发-iPhoneX的适配-iPhoneX屏幕适配分享
  3. java 正则 空白字符_关于JAVA正则匹配空白字符的问题
  4. 如何用环信SDK一步一步实现视频会议(详细版)
  5. 地理、Mercator(墨卡托)、UTM 之间关系
  6. Merkle Tree(默克尔树)算法解析
  7. Linux创建4个线程P1 P2,HYZ-OS-2017-2-进程管理-4.ppt
  8. 摆了两天地摊,我更焦虑了
  9. 机器学习中集成学习的一些知识
  10. 学习笔记——IGP / EGP基础