Django的基本用法

Posted 酱紫安

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django的基本用法相关的知识,希望对你有一定的参考价值。

学习Django有一段时间了,整理一下,充当笔记。盗张图:

MVC

  • 大部分开发语言中都有MVC框架
  • MVC框架的核心思想是:解耦
  • 降低各功能模块之间的耦合性,方便变更,更容易重构代码,最大程度上实现代码的重用
  • m表示model,主要用于对数据库层的封装
  • v表示view,用于向用户展示结果
  • c表示controller,是核心,用于处理请求、获取数据、返回结果

MVT

  • Django是一款python的web开发框架
  • 与MVC有所不同,属于MVT框架
  • m表示model,负责与数据库交互
  • v表示view,是核心,负责接收请求、获取数据、返回结果
  • t表示template,负责呈现内容到浏览器

一、基本命令

1. 新建一个 django project

django-admin startproject project_name

注意 project_name 是自己的项目名称,需要为合法的 Python 包名,如不能为 1a 或 a-b。

2. 新建 app

要先进入项目目录下,cd project_name 然后执行下面的命令(下同,已经在项目目录下则不需要 cd project_name)

python manage.py startapp app_name

与项目名类似 app name 也需要为合法的 Python 包名,如 blog,news, aboutus 等都是合法的 app 名称。一般一个项目有多个app, 当然通用的app也可以在多个项目中使用。

3. 创建数据库表 或 更改数据库表或字段

Django 1.7.1及以上 用以下命令
# 1. 创建更改的文件
python manage.py makemigrations
# 2. 将生成的py文件应用到数据库
python manage.py migrate
 
 
旧版本的Django 1.6及以下用
python manage.py syncdb

备注:对已有的 models 进行修改,Django 1.7之前的版本的Django都是无法自动更改表结构的,不过有第三方工具 south。这种方法可以在SQL等数据库中创建与models.py代码对应的表,不需要自己手动执行SQL。

4. 使用开发服务器

开发服务器,即开发时使用,一般修改代码后会自动重启,方便调试和开发,但是由于性能问题,建议只用来测试,不要用在生产环境。

python manage.py runserver
 
# 当提示端口被占用的时候,可以用其它端口:
python manage.py runserver 8001
python manage.py runserver 9999# 监听机器所有可用 ip (电脑可能有多个内网ip或多个外网ip)
python manage.py runserver 0.0.0.0:8000
# 如果是外网或者局域网电脑上可以用其它电脑查看开发服务器
# 访问对应的 ip加端口,比如 http://172.16.20.2:8000

5. 清空数据库

python manage.py flush

此命令会询问是 yes 还是 no, 选择 yes 会把数据全部清空掉,只留下空表。

6. 创建超级管理员

python manage.py createsuperuser
 
# 按照提示输入用户名和对应的密码就好了邮箱可以留空,用户名和密码必填
 
# 修改 用户密码可以用:
python manage.py changepassword username

7. 导出数据 导入数据

python manage.py dumpdata appname > appname.json
python manage.py loaddata appname.json

8. Django 项目环境终端

python manage.py shell

这个命令和 直接运行 python 或 bpython 进入 shell 的区别是:你可以在这个 shell 里面调用当前项目的 models.py 中的 API,对于操作数据,还有一些小测试非常方便。如果你安装了 bpython 或 ipython 会自动用它们的界面.

9. 数据库命令行

python manage.py dbshell

在这个终端可以执行数据库的SQL语句。如果您对SQL比较熟悉,可能喜欢这种方式。Django 会自动进入在settings.py中设置的数据库,如果是 mysql 或 postgreSQL,会要求输入数据库用户密码。

10. 更多命令

终端上输入 python manage.py 可以看到详细的列表,在忘记子名称的时候特别有用。

二、创建项目

1、命令django-admin startproject mysite

  • 进入mysite目录,目录结构如下图:

默认目录结构

2、目录说明

  • manage.py:一个命令行工具,可以使你用多种方式对Django项目进行交互
  • templates:模板文件都放到这里
  • 内层的目录:项目的真正的Python包
  • _init _.py:一个空文件,它告诉Python这个目录应该被看做一个Python包
  • settings.py:项目的配置
  • urls.py:项目的URL声明
  • wsgi.py:项目与WSGI兼容的Web服务器入口

 3、配置文件

数据库

DATABASES = {
    \'default\': {
    \'ENGINE\': \'django.db.backends.mysql\',
    \'NAME\':\'dbname\',
    \'USER\': \'root\',
    \'PASSWORD\': \'xxx\',
    \'HOST\': \'\',
    \'PORT\': \'\',
    }
}


# 由于Django内部连接MySQL时使用的是MySQLdb模块,而python3中还无此模块,所以需要使用pymysql来代替
  
# 如下设置放置的与project同名的配置的 __init__.py文件中
  
import pymysql
pymysql.install_as_MySQLdb() 

模版

TEMPLATE_DIRS = (
        os.path.join(BASE_DIR,\'templates\'),
    )

静态文件

STATICFILES_DIRS = (
        os.path.join(BASE_DIR,\'static\'),
    )

三、新建 app01

1、python manage.py startapp app_name

在一个项目中可以创建一到多个应用,每个应用进行一种业务处理

2、有的版本需要在settings中配置当前app,不然django无法找到自定义的simple_tag,我的Django版本是自己自动就添加上了

INSTALLED_APPS = (
    \'django.contrib.admin\',
    \'django.contrib.auth\',
    \'django.contrib.contenttypes\',
    \'django.contrib.sessions\',
    \'django.contrib.messages\',
    \'django.contrib.staticfiles\',
    \'app01\',
)

 3、model.py

定义模型类

  • 有一个数据表,就有一个模型类与之对应
  • 打开models.py文件,定义模型类
  • 引入包from django.db import models
  • 模型类继承自models.Model类
  • 说明:不需要定义主键列,在生成时会自动添加,并且值为自动增长
  • 当输出对象时,会调用对象的str方法
from django.db import models

class BookInfo(models.Model):
    title = models.CharField(max_length=20)
    pub_date = models.DateTimeField()
    def _ _str_ _(self):
        return "%d" % self.title
  • 生成迁移文件:根据模型类生成sql语句
python manage.py makemigrations
  • 迁移文件被生成到应用的migrations目录

迁移文件

  • 执行迁移:执行sql语句生成数据表
python manage.py migrate 

测试数据操作

  • 进入python shell,进行简单的模型API练习
python manage.py shell

4、视图

  • 在django中,视图对WEB请求进行回应
  • 视图接收reqeust对象作为第一个参数,包含了请求的信息
  • 视图就是一个Python函数,被定义在views.py中
#coding:utf-8
from django.http import HttpResponse

def index(request):
    return HttpResponse("index")
  • 定义完成视图后,需要配置urlconf,否则无法处理请求

第一行是声明编码为utf-8, 因为我们在代码中用到了中文,如果不声明py2就报错.

第二行引入HttpResponse,它是用来向网页返回内容的,就像Python中的 print 一样,只不过 HttpResponse 是把内容显示到网页上。

我们定义了一个index()函数,第一个参数必须是 request,与网页发来的请求有关,request 变量里面包含getpost的内容,用户浏览器,系统等信息在里面。

函数返回了一个 HttpResponse 对象,可以经过一些处理,最终显示几个字到网页上。

5、URLconf

  • 在Django中,定义URLconf包括正则表达式、视图两部分
  • Django使用正则表达式匹配请求的URL,一旦匹配成功,则调用应用的视图
  • 注意:只匹配路径部分,即除去域名、参数后的字符串
  • 在mysite中的urls.py中添加urlconf
from django.conf.urls import url
from django.contrib import admin
from App01 import views

urlpatterns = [
    url(r\'^$\', views.index),
]

四、运行

在终端上运行 python manage.py runserver

我们打开浏览器,访问 http://127.0.0.1:8000/

会在浏览器上看到:index。这个词

以上是关于Django的基本用法的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django Summernote 中显示编程片段的代码块?

Django REST framework 基本组件

Python中的基本函数及其常用用法简析

Django中ajax的基本用法

django之缓存的用法, 文件形式与 redis的基本使用

c_cpp 加载源图像固定用法(代码片段,不全)