Django框架入门

简介: Django框架入门

三大主流框架

(1)Django

(2)Flask

(3)Tornado

Django MVC模式

(1)模型 Model

(2)视图 View

(3)控制器 Controller

准备工作

1、创建项目

django-admin startproject <projectName>
# 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 <appName>
# 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 %} 
    <li>{{item}}</li>
{% endfor %}

(3)if-else分支

{% if true %} 
    <p>true</p>
{% else %}
    <p>false</p>
{% 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 %}
    <div class="page-body-main">
        <h2>{{ article.title }}</h2>
        <p>{{ article.content }}</p>
    </div>
{% endfor %}

4、路由参数

myblog/urls.py

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

传递路由参数

myblog/templates/myblog/index.html

<!-- 硬编码 -->
<a href="/myblog/detail/{{article.article_id}}">{{ article.title }}
<!-- 或者使用name -->
<a href="{% url 'myblog:detail' article.article_id  %}">{{ article.title }}

5、查询SQL日志

setting.py

# 查看sql日志
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'propagate': True,
            'level': 'DEBUG',
        },
    }
}

6、Paginator分页

视图函数 myblog/views.py

def index_page(request):
    page = request.GET.get("page", "1")
    page = int(page)
    # 并没有直接查询所有数据
    lst = Article.objects.all()
    # 分页,每页5个
    paginator = Paginator(lst, 5)
    current_article_list = paginator.get_page(page)
    # 上一页下一页
    if current_article_list.has_next():
        next_page = current_article_list.next_page_number()
    else:
        next_page = page
    if current_article_list.has_previous():
        previous_page = current_article_list.previous_page_number()
    else:
        previous_page = page
    data = {
        "article_list": current_article_list,
        "page_range": paginator.page_range,
        "current_page": page,
        "previous_page": previous_page,
        "next_page": next_page,
    }
    return render(request, "myblog/index.html", data)

模板渲染分页部分(使用Bootstrap样式)

myblog/templates/myblog/index.html

 <ul class="pagination">
    <li>
        <a href="{% url 'myblog:index' %}?page={{ previous_page }}" aria-label="Previous">
            <span aria-hidden="true">&laquo;</span>
        </a>
    </li>
    {% for page in page_range %}
        <li><a href="{% url 'myblog:index' %}?page={{ page }}">{{ page }}</a></li>
    {% endfor %}
    <li>
        <a href="{% url 'myblog:index' %}?page={{ next_page }}" aria-label="Next">
            <span aria-hidden="true">&raquo;</span>
        </a>
    </li>
</ul>


相关文章
|
19天前
|
数据采集 中间件 Python
如何在Django框架中进行输入验证和过滤?
通过综合运用这些方法,可以在 Django 框架中有效地进行输入验证和过滤,提高应用的安全性和数据质量。同时,还可以根据具体的业务需求进一步扩展和定制验证逻辑。
102 64
|
28天前
|
开发者 数据库管理 Python
Django框架和Flask框架的区别
总体而言,Django 适合需要快速搭建大型应用的开发者,而 Flask 则更适合有特定需求和追求灵活性的开发者。
112 64
|
1月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
171 45
|
19天前
|
监控 安全 测试技术
Django框架的表单验证和过滤机制是否可以应对复杂的安全场景?
综上所述,Django 框架的表单验证和过滤机制在一定程度上可以应对复杂的安全场景,但需要综合运用多种手段来进一步提升安全性,以适应不断变化的安全挑战。
27 1
|
26天前
|
搜索推荐 API 开发者
Django框架和Flask框架的适用场景分别是什么?
总体而言,Django 更适合需要全面功能和大规模开发的场景,而 Flask 则更适合灵活性要求高、小型项目或特定需求的开发。当然,具体的选择还应根据项目的具体情况、团队的技术能力和偏好等因素来综合考虑。在实际应用中,开发者可以根据项目的特点和需求,灵活选择使用这两个框架,或者结合它们的优势来构建更强大的 Web 应用程序。
|
26天前
|
开发框架 搜索推荐 数据可视化
Django框架适合开发哪种类型的Web应用程序?
Django 框架凭借其强大的功能、稳定性和可扩展性,几乎可以适应各种类型的 Web 应用程序开发需求。无论是简单的网站还是复杂的企业级系统,Django 都能提供可靠的支持,帮助开发者快速构建高质量的应用。同时,其活跃的社区和丰富的资源也为开发者在项目实施过程中提供了有力的保障。
|
28天前
|
安全 前端开发 数据库
Django框架
总的来说,Django 是一个非常优秀的 Web 框架,它为开发者提供了坚实的基础和丰富的功能,使得构建高质量的 Web 应用变得更加容易和高效。无论是初学者还是经验丰富的开发者,都可以从中受益,利用它来实现自己的创意和想法。
40 4
|
1月前
|
Python
Django 框架的路由系统
Django 框架的路由系统
44 6
|
1月前
|
Java API 数据库
Django:从入门到精通
【11月更文挑战第18天】Django是一个由Python编写的高级Web应用框架,以其简洁性、安全性和高效性而闻名。Django最初由Adrian Holovaty和Simon Willison于2003年开发,旨在简化Web应用的开发过程。作为一个开放源代码项目,Django迅速吸引了大量的开发者和用户,成为了Python Web开发领域的重要工具之一。
45 1
|
2月前
|
IDE 关系型数据库 MySQL
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
这篇文章是关于如何创建一个Django框架,介绍Django的项目结构和开发逻辑,并指导如何创建应用和编写“Hello, World!”程序的教程。
99 3
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
下一篇
DataWorks