您当前的位置: 首页 >  彭世瑜 django

Django框架入门

彭世瑜 发布时间:2019-09-15 13:01:11 ,浏览量:2

三大主流框架 (1)Django (2)Flask (3)Tornado

Django MVC模式 (1)模型 Model (2)视图 View (3)控制器 Controller

准备工作

1、创建项目

django-admin startproject 

# eg:
django-admin startproject mysite
cd mysite

2、项目介绍

setting.py  # 配置文件
urls.py     # 路由配置
manage.py   # 管理文件

3、Django基本命令

python manage.py runserver # 运行Django项目
python manage.py shell     # shell环境
python manage.py test      # 执行测试

4、数据库相关命令

python manage.py makemigrations  # 创建模型变更的迁移文件
python manage.py migrate         # 执行上一个命令创建的迁移文件
python manage.py dumpdata        # 数据库导出到文件
python manage.py loaddata        # 文件导入到数据库

5、Django项目 Vs Django应用 每个应用可以管理自己的模型视图模板路由和静态文件 一个项目可以包含一组配置和若干个Django应用

6、创建应用 (1)新建应用

python manage.py startapp 

# eg:
python manage.py startapp myblog

(2)setting.py 中注册app

INSTALLED_APPS = [
    # ...

    'myblog.apps.MyblogConfig'  # 这是新建的app
]

(3)新建视图函数 myblog/views.py

from django.http import HttpResponse


def hello(request):
    return HttpResponse("hello Django")

(4)app中配置url 新建 myblog/urls.py 将url与视图做映射关系


from django.urls import path
from . import views


urlpatterns = [
    path('hello', views.hello),
]

(5)项目中配置url urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('myblog/', include("myblog.urls")),
]

访问测试 http://127.0.0.1:8000/myblog/hello

7、应用目录

views.py   # 视图处理
models.py  # 应用模型
admin.py   # Admin模块管理对象
apps.py    # 声明应用
tests.py   # 编写应用测试用例
urls.py    # 管理应用路由(自行创建)
Django模型层

视图层 模型层 数据库

1、模型层 (1)屏蔽不同数据库之间的差异 (2)便捷工据

2、settings.py 配置数据库引擎

DATABASES  # 选项配置数据库 默认为sqlite3

3、模型字段类型 (1)数字类型:IntegerField (2)文本类型:TextField (3)日期类型:DataTimeField (4)自增ID: AutoField (5)主键: primary_key

myblog/models.py 新建文章model

from django.db import models


class Article(models.Model):
    # 文章的唯一ID
    article_id = models.AutoField(primary_key=True)
    # 文章标题
    title = models.TextField()
    # 文章摘要
    brief_content = models.TextField()
    # 文章内容
    content = models.TextField()
    # 文章发布日期
    publish_date = models.DateTimeField(auto_now=True)

执行数据库建表操作

$ python manage.py makemigrations  # 生成建表操作

$ python manage.py migrate         # 执行操作

4、Django Shell 交互式编程 小范围测试

进入shell

python manage.py shell

from myblog.models import Article

# 新建文章
a = Article()
a.title = "文章标题"
a.brief_content = "文章摘要"
a.content = "文章内容"

print(a)

a.save()

# 查询文章
articles = Article.objects.all()
article = articles[0]
print(article.title)

5、Django Admin 后台管理工具 用户认证,显示管理表格,校验输入等相似功能

创建管理员用户

python manage.py createsuperuser

后台管理地址 http://127.0.0.1:8000/admin

将模型注册到admin模块 myblog/admin.py

from django.contrib import admin

# Register your models here.
from .models import Article

admin.site.register(Article)

修改后台显示 myblog/models.py

class Article(models.Model):
    # ...

    # 修改admin后台显示 Article object -> self.title
    def __str__(self):
        return self.title


6、数据返回

编写视图函数 myblog/views.py


from django.http import HttpResponse, JsonResponse
from .models import Article

def articles(request):
    # 查询数据 select * from article
    lst = Article.objects.values().all()
    return JsonResponse(list(lst), safe=False)

配置app路由 myblog/urls.py

from django.urls import path
from . import views


urlpatterns = [
    path('hello', views.hello),
    # 新增路由映射
    path('articles', views.articles),
]

测试返回 http://127.0.0.1:8000/myblog/articles

[
    {
        "article_id": 1,
        "title": "文章标题",
        "brief_content": "文章摘要",
        "content": "文章内容",
        "publish_date": "2019-09-14T14:36:32.400Z"
    },
    {
        "article_id": 2,
        "title": "这个事第二篇文章",
        "brief_content": "这个事第二篇文章的内容摘要",
        "content": "这个事第二篇文章的内容",
        "publish_date": "2019-09-14T14:36:51.387Z"
    }
]
Django视图与模板

Bootstrap栅格系统,宽为12等份 https://www.bootcss.com/

1、模板系统 表现形式是文本 分离文档的表现形式和表现内容 定义了特有的标签占位符

2、基本语法 (1)变量

{{name}}

(2)for循环

{% for item in list %} 
    
  • {{item}}
  • {% endfor %}

    (3)if-else分支

    {% if true %} 
        

    true

    {% else %}

    false

    {% endif %}

    3、渲染页面 myblog/views.py

    from django.shortcuts import render
    from .models import Article
    
    def index_page(request):
        lst = Article.objects.all()
    
        data = {
            "article_list": lst
        }
        return render(request, "myblog/index.html", data)
    
    

    myblog/templates/myblog/index.html

    {% for article in article_list %}
        
            {{ article.title }}
            {{ article.content }}
        
    
    {% endfor %}
    

    4、路由参数

    myblog/urls.py

    from django.urls import path
    from . import views
    
    # 添加命名空间
    app_name = "myblog"
    
    urlpatterns = [
        #...
    
        path('detail/', views.detail_page, name="detail"),
    ]
    
    

    传递路由参数 myblog/templates/myblog/index.html

    
                
    关注
    打赏
    1688896170
    查看更多评论
    0.0601s