Django学习笔记

django迁移无效问题解决

背景

  • Django是一个开放源代码的Web应用框架
  • Django遵守BSD版权,初次发布于2005年7月, 并于2008年9月发布了第一个正式版本1.0 。
  • MVC模式,即模型M(module),视图V(view)和控制器C(controller)。
    M:主要对数据库层的封装
    V:向用户显示数据
    C:核心,处理请求,获取数据,返回结果
    • 高可扩展性
    • 向后兼容
    • 低耦合,高内聚
      Django采用了MVT设计模式
      m表示model,负责与数据库交互
      v表示view,是核心,负责接收请求、获取数据、返回结果
      t表示template,负责呈现内容到浏览器
mvt

shell 快捷键

安装

pip install Django==1.11.6

如需获取最新版,见Django安装

创建项目

  • 创建HelloWorld项目
django-admin.py startproject HelloWorld
  • 目录说明

    • HelloWorld: 项目的容器。
    • manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
    • HelloWorld/init.py: 一个空文件,告诉 Python 该目录是一个 Python 包。
    • HelloWorld/settings.py: 该 Django 项目的设置/配置。
    • HelloWorld/urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。
    • HelloWorld/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。
  • 运行第一个server
    输入命令:

python manage.py runserver 0.0.0.0:8000

浏览器打开网址:127.0.0.1:8000,如果正常打开网页,则运行正常。

  • url() 函数
    Django url() 可以接收四个参数,分别是两个必选参数:regex、view 和两个可选参数:kwargs、name,接下来详细介绍这四个参数。
    • regex: 正则表达式,与之匹配的 URL 会执行对应的第二个参数 view。
    • view: 用于执行与正则表达式匹配的 URL 请求。
    • kwargs: 视图使用的字典类型的参数。
    • name: 用来反向获取 URL。

使用Templates

  • 在项目目录下新建templates文件夹
    新建html文件,如hello.html
<h1>hello world</h1>
  • 添加模板路径
    在settings.py文件中添加:
    修改 TEMPLATES 中的 DIRS 为 [BASE_DIR+"/templates",]
  • 使用
    view.py文件中使用:
from django.http import

模板标签

  • if/else
{% if condition %}
     ... display
{% endif %}
  • for
<ul>
{% for athlete in athlete_list %}
    <li>{{ athlete.name }}</li>
{% endfor %}
</ul>
  • ifequal/ifnotequal
{% ifequal section 'sitenews' %}
    <h1>Site News</h1>
{% else %}
    <h1>No News Here</h1>
{% endifequal %}
  • 注释标签
{# 这是一个注释 #}
  • 过滤器
{{ name|lower }}
{{ my_list|first|upper }}
{{ bio|truncatewords:"30" }}

其他过滤器
addslashes : 添加反斜杠到任何反斜杠、单引号或者双引号前面。
date : 按指定的格式字符串参数格式化 date 或者 datetime 对象,实例:
{{ pub_date|date:"F j, Y" }}
length : 返回变量的长度。

  • include
{% include "nav.html" %}

模板继承

其中hello.html继承了base.html。

  • base.html

<!DOCTYPE html>
<html>
<head>

<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
    <h1>Hello World!</h1>
    <p>菜鸟教程 Django 测试。</p>
    {% block mainbody %}
       <p>original</p>
    {% endblock %}
</body>
</html>
  • hello.html

{% extends "base.html" %}
 
{% block mainbody %}<p>继承了 base.html 文件</p>
{% endblock %}

使用数据库MySQL

  • 数据库安装
    安装MySQL可参考:MySQL安装
  • 数据库配置
    在项目的 settings.py 文件中找到 DATABASES 配置项

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 或者使用 mysql.connector.django
        'NAME': 'test', #数据库名
        'USER': 'test',  # 数据库用户名
        'PASSWORD': 'test123', #数据库密码
        'HOST':'localhost',
        'PORT':'3306',
    }
}
  • 定义模型
    要使用模型,需要创建一个app,在项目目录下使用以下命令:
django-admin.py startapp TestModel

修改 TestModel/models.py 文件,代码如下:

# models.py
from django.db import models
 
class Test(models.Model):
    name = models.CharField(max_length=20)

定义name字段,数据类型则由CharField(相当于varchar)、DateField(相当于datetime), max_length 参数限定长度。

  • 添加模型
    在settings.py中找到INSTALLED_APPS这一项,如下:
INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'TestModel',               # 添加此项
)
  • 运行迁移
$ python manage.py makemigrations TestModel  # 让 Django 知道我们在我们的模型有一些变更
$ python manage.py migrate TestModel   # 创建表结构
  • 测试
    进入shell命令
python manage.py shell

查找信息:

Test.objects.all()
  • 添加数据
    添加test.db文件:

# -*- coding: utf-8 -*-
 
from django.http import HttpResponse
 
from TestModel.models import Test
 
# 数据库操作
def testdb(request):
    test1 = Test(name='runoob')
    test1.save()
    return HttpResponse("<p>数据添加成功!</p>")
  • 修改urls.py文件:
from django.conf.urls import *
from . import view,testdb
 
urlpatterns = [
    url(r'^hello$', view.hello),
    url(r'^testdb$', testdb.testdb),
]
# -*- coding: utf-8 -*-
 
from django.http import HttpResponse
 
from TestModel.models import Test
 
# 数据库操作
def testdb(request):
    test1 = Test(name='runoob')
    test1.save()
    return HttpResponse("<p>数据添加成功!</p>")

  • 运行
    运行命令:
python manage.py runserver 0.0.0.0:8000

打开浏览器访问:127.0.0.1:8000

创建用户组

python manage.py createsuperuser

在admin.py中注册user

admin.site.register('TestModel')

开启服务后地址后面加上/user即可进入后台管理页面,在管理页面可以可视化管理,十分方便。

部署

  • 安装:
    先安装uwsgi:
    pip install uwsgi
  • 测试
    新建文件test.py
# test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"] # python3
    #return ["Hello World"] # python2
  • 运行uwsgi:
uwsgi --http :8000 --wsgi-file test.py
  • uwsgi运行django
    uwsgi --http :8000 --module mysite.wsgi
  • 安装nginx
    sudo apt-get install nginx
  • 部署静态文件
    django settings中添加:
    STATIC_ROOT = 'home/renyangfar/project/static' 运行命令收集静态文件到配置的STATIC_ROOT文件中:python manage.py collectstatic`
  • 编辑配置文件/etc/nginx/sites-enabled/default
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266

推荐阅读更多精彩内容

  • 本文是在学习https://www.gitbook.com/book/djangogirlstaipei/d...
    LLLeon阅读 1,815评论 0 16
  • 建立第一个项目 新建工程 进入你要建立工程的目录,键入如下命令(其中mysite是你的项目名称): django-...
    小小白老鼠阅读 685评论 0 1
  • 笔记来源:自强学堂-Django教程这个教程真的非常好用!强烈推荐 Django简介-组成部分 urls.py:网...
    LeeLom阅读 1,372评论 0 2
  • (一)、启动服务器 (二)、创建数据库表 或 更改数据库表或字段 Django 1.7.1及以上 用以下命令 1....
    夏天夏星阅读 5,541评论 0 17
  • 去年的事情特别多,也没有什么时间充电学习。今年目测轻松一点,年初本来计划就好好休息一下,结果一晃2017就度过了一...
    灰豹儿阅读 599评论 0 2