本次使用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 User class 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) # 设置为字符类型最大输入长度为30
author = 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... 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 blog.0001_initial... OK
Applying 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. 【入门详解】MyBatis入门基础详解

    什么是mybatis? MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis使用简单的XM ...

  2. Django入门------基础(1)

    基础 Django 是用 Python 写的一个自由和开放源码 web 应用程序框架.web框架是一套组件,能帮助你更快.更容易地开发web站点.当你开始构建一个web站点时,你总需要一些相似的组件: ...

  3. 深入浅出DOM基础——《DOM探索之基础详解篇》学习笔记

    来源于:https://github.com/jawil/blog/issues/9 之前通过深入学习DOM的相关知识,看了慕课网DOM探索之基础详解篇这个视频(在最近看第三遍的时候,准备记录一点东西 ...

  4. (十八)整合Nacos组件,环境搭建和入门案例详解

    整合Nacos组件,环境搭建和入门案例详解 1.Nacos基础简介 1.1 关键特性 1.2 专业术语解释 1.3 Nacos生态圈 2.SpringBoot整合Nacos 2.1 新建配置 2.2 ...

  5. Dom探索之基础详解

    认识DOM DOM级别 注::DOM 0级标准实际并不存在,只是历史坐标系的一个参照点而已,具体的说,它指IE4.0和Netscape Navigator4.0最初支持的DHTML. 节点类型 注:1 ...

  6. Android中Canvas绘图基础详解(附源码下载) (转)

    Android中Canvas绘图基础详解(附源码下载) 原文链接  http://blog.csdn.net/iispring/article/details/49770651   AndroidCa ...

  7. javaScript基础详解(1)

    javaScript基础详解 首先讲javaScript的摆放位置:<script> 与 </script> 可以放在head和body之间,也可以body中或者head中 J ...

  8. Python学习一:序列基础详解

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7858473.html 邮箱:moyi@moyib ...

  9. Python学习二:词典基础详解

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7862377.html 邮箱:moyi@moyib ...

随机推荐

  1. 【提取元素的值 】【追加文本append】【删除文本remove】【class的操作】【读取元素的宽度,高度】

    1.取值 $("#test").text()                                    //取id=test里面的文字 $("#test&qu ...

  2. pwnable.kr fb

    fb-1 pt 连接到服务器,发现 有三个文件,fd脚本,fd.c脚本的源程序,flag是要看的东西,无权限 来我们分析一下源码 如果只传进去一个值,print” pass argv[1] a num ...

  3. SFTP客户端代码示例

    参考链接:SFTP客户端代码示例 操作系统:Windows7/8,VS2013 环境:libssh2 1.4.3.zlib-1.2.8.openssl-1.0.1g 原文: “从http://www. ...

  4. python,os.path简单用法

    #首先导入os包 import os#引入time模块是因为需要将浮点型的时间转为东八区时间 import time # basename(path),去掉路径名称,单独返回文件名 f = os.pa ...

  5. (ScrollViewer或者有滚动条的控件)嵌套一个(ScrollViewer或者有滚动条的控件)禁用里面的滚动条

    转自:http://blog.csdn.net/haylhf/article/details/8351203 后有改动 在C# 中,两个ScrollViewer嵌套在一起或者ScrollViewer里 ...

  6. Python3-初识面向对象

    知识点: 面向过程VS面向对象 初识类和对象 对象之间的交互 类与对象之间的命名空间 面向对象的组合用法 面向对象的三大特性(封装.继承.多态) 继承 抽象类和接口类 多态 封装  -- (prope ...

  7. dubbo的本地存根(Stub)

    dubbo的本地存根的原理是:远程服务后,客户端通常只剩下接口,而实现全在服务器端,但提供方有些时候想在客户端也执行部分逻辑,那么就在服务消费者这一端提供了一个Stub类,然后当消费者调用provid ...

  8. JQuery 拾遗

    jquery基本上依赖百度,不熟悉的jquery操作记录于此: 1.判断元素的显示隐藏:$("#XXX").is(':visible'). 2. jquery取所有属性以什么开头 ...

  9. RESTful API 设计指南(转)

    网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机.平板.桌面电脑.其他专用设备......). 因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信.这导致AP ...

  10. 设计模式C++学习笔记之四(Multition多例模式)

      多例模式,这个在GOF的模式设计里没有提到,但在实际工作中确实会用到.更详细的内容及说明可以参考原作者博客:cbf4life.cnblogs.com. 4.1.解释 main(),客户 略 说明: ...