美文网首页
Django学习笔记

Django学习笔记

作者: renyangfar | 来源:发表于2017-10-15 13:05 被阅读0次

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

相关文章

网友评论

      本文标题:Django学习笔记

      本文链接:https://www.haomeiwen.com/subject/wpnquxtx.html