一个Django实例

Django基本配置

官网下载

安装(安装最新LTS版)

pip3 install django==1.11.9

创建一个django项目

下面的命令创建了一个名为"mysite"的Django 项目:

django-admin startproject mysite

目录介绍

mysite/
├── manage.py  # 管理文件
└── mysite  # 项目目录
    ├── __init__.py
    ├── settings.py  # 配置
    ├── urls.py  # 路由 --> URL和函数的对应关系
    └── wsgi.py  # runserver命令就使用wsgiref模块做简单的web server

运行Django项目

python manage.py runserver 127.0.0.1:8000

app应用创建

命令行:

python manage.py startapp appname

注册app:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01.apps.App01Config'   #建议写这样不建议写'app01' 
]

注意:app不注册无法进行数据库表创建会显示 No changes detected

数据库配置

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() 

模板文件配置

#import os

#BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

#__file__      当前文件名
#os.path.abspath(__file__)     当前文件的绝对路径
#os.path.dirname(os.path.abspath(__file__))        当前文件的父目录绝对路径
#os.path.dirname(os.path.dirname(os.path.abspath(__file__)))              当前文件的父目录的父目录的绝对路径  即   BASE_DIR

#可以使用print一层一层测试


TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, "templates")],  # templates文件夹位置  看清文件名称可能是"template"
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

静态文件配置

STATIC_URL = '/static/'  # HTML中使用的静态文件夹前缀  是 别名  
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),  # 静态文件存放位置 --- 是跟在总静态文件后的位置
#例如:os.path.join(BASE_DIR, "项目名/stactic/"), #等等可以有很多项目目录 其实在html文件中只会写 /static/文件名 ]


多项目实列:
项目有cmdb,blog,crm

目录显示配置:
mysite
mysite
__init__.py
urls.py
moudles.py
settings.py
wsgi.py
cmdb
views.py
moudles.py
urls.py
static
img
a.jpg
...
crm
views.py
moudles.py
urls.py
static
img
b.jpg
...
blog
views.py
moudles.py
urls.py
static
img
c.jpg
...
templates
login.html
register.html
...

statics
bootstarp
js
css
fontawesome(总的js,css,和插件文件)
...

manage.py(运行文件)


如上文件的静态文件配置如下:
settings.py中:
STATIC_URL = '/static/'  # HTML中使用的静态文件夹前缀  是 别名  
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "statics"),        #总静态文件中存放js,css和其他插件文件
os.path.join(BASE_DIR, "blog/stactic/"), #存放blog项目中的图片,视频,声音等文件
os.path.join(BASE_DIR, "crm/static/"), #存放crm项目中的图片,视频,声音等文件
os.path.join(BASE_DIR, "cmdb/static/"), #存放cmdb项目中的图片,视频,声音等文件 ]


html中文件引入格式:

<link rel="stylesheet" href="/statics/bootstarp/js/bootstrap.js">
<script src="/statics/bootstarp/css/bootstrap.css"></script> # 总静态文件引入具体可以使用具体文件位置

<img src="/static/a.jpg" alt="">
<img src="/static/b.jpg" alt="">
<img src="/static/c.jpg" alt=""> #在这里不需要引入具体文件位置名称,只需要用别名替代即可,如若不懂请看下图详解
 

图解:

刚开始学习时可在配置文件中暂时禁用csrf中间件,方便表单提交测试

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

Django基础必备三件套

from django.shortcuts import HttpResponse, render, redirect    #shutcuts 捷径的意思

HttpResponse

内部传入一个字符串参数,返回给浏览器。

例如:

def index(request):
    # 业务逻辑代码
    return HttpResponse("OK")

render

除request参数外还接受一个待渲染的模板文件和一个保存具体数据的字典参数。

将数据填充进模板文件,最后把结果返回给浏览器。(类似于我们上面用到的jinja2)

例如:

def index(request):
    # 业务逻辑代码
    return render(request, "index.html", {"name": "alex", "hobby": ["烫头", "泡吧"]})

redirect

接受一个URL参数,表示跳转到指定的URL。

例如:

def index(request):
    # 业务逻辑代码
    return redirect("/home/")

重定向是怎么回事?

启动Django报错

Django 启动时报错 “UnicodeEncodeError ...”

报这个错误通常是因为计算机名为中文,改成英文的计算机名重启下电脑就可以了。

 Django 启动报错“SyntaxError: Generator expression must be parenthesized”

报这个错很大可能是因为使用了Python3.7.0,而目前(2018-06-12)Python3.7.0和Django还有点兼容性问题,换回Python3.6的环境即可。

 

其他常用命令

python manage.py runserver 0.0.0.0
python manage.py startapp appname
python manage.py syncdb
python manage.py makemigrations
python manage.py migrate

python manage.py createsuperuser

 

posted @ 2019-02-19 23:14  樵夫-justin  阅读(148)  评论(0编辑  收藏  举报