【安全开发】python—django框架快速搭建网站

🔥🔥django框架

0、前置

Django 简介 | 菜鸟教程Django 简介 基本介绍 Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架。 使用 Django,只要很少的代码,Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的 Web 服务 Django 本身基于 MVC 模型,即 Model(模型)+ View(视图)+ Controller(控制器)设计模式,MVC 模式使后续对程序的修改和扩展简化,并且使程序某..https://www.runoob.com/django/django-intro.html

Django

是一个由 Python 编写的一个开放源代码的 Web 应用框架。

使用 Django,只要很少的代码,Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的 Web 服务 Django 本身基于 MVC 模型,即 Model(模型)+ View(视图)+ Controller(控制器)设计模式,MVC 模式使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。

MVC 优势:

  • 低耦合
  • 开发快捷
  • 部署方便
  • 可重用性高
  • 维护成本低
  • ...

Python 加 Django 是快速开发、设计、部署网站的最佳组合。

MVC 与 MTV模型

MVC 模型

MVC 模式(Model–view–controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。

MVC 以一种插件式的、松耦合的方式连接在一起。

模型(M)- 编写程序应有的功能,负责业务对象与数据库的映射(ORM)。

视图(V)- 图形界面,负责与用户的交互(页面)。

控制器(C)- 负责转发请求,对请求进行处理。

MTV 模型

Django 的 MTV 模式本质上和 MVC 是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django 的 MTV 分别是指:

  • M 表示模型(Model):编写程序应有的功能,负责业务对象与数据库的映射(ORM)。
  • T 表示模板 (Template):负责如何把页面(html)展示给用户。
  • V 表示视图(View):负责业务逻辑,并在适当时候调用 Model和 Template。

1、搭建(mac)

sudo pip install virtualenv

  sudo pip install virtualenvwrapper

查找python和 virtualenvwrapper安装位置

 which virtualenvwrapper.sh

 which python3

sudo vim ~/.bash_profile

插入如下代码:

export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3(python目录)
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS=' -p /usr/bin/python3 '
export PROJECT_HOME=$HOME/Devel
source /usr/local/bin/virtualenvwrapper.sh(virtualenvwrapper目录)

source  ~/.bash_profile

尝试创建django环境  ,并安装

 mkvirtualenv my_django_environment

 pip3 install django

❤️测试安装

在你的命令提示符/终端导航到你想存储你Django应用程序的位置。为您的测试站点创建一个文件夹并进入其中。

mkdir django_test
cd django_test

然后,可以像所展示的一样使用 django-admin 工具创建一个名为“ mytestsite ”的新框架站点。创建网站后,可以 CD 到此文件夹,并将在其中找到管理项目的主要脚本,名为manage.py

django-admin startproject mytestsite
cd mytestsite

可以在这个文件夹中使用manager.pyrunserver命令运行开发 web 服务器。

python3 manage.py runserver

✨如果报错可尝试下面的命令

python3 manage.py migrate

 一旦服务器运行,可以通过本地 Web 浏览器打开http://127.0.0.1:8000/来查看该站点:

2、搭建图书馆网站01

2.1 创建项目

mkdir locallibrary
cd locallibrary

django-admin startproject命令创建新项目,并进入该文件夹。

django-admin startproject locallibrary
cd locallibrary

❤️❤️locallibrary 项目的子文件夹是整个网站的进入点:

  • settings.py 包含所有的网站设置。这是可以注册所有创建的应用的地方,也是静态文件,数据库配置的地方,等等。
  • urls.py 定义了网站 url 到 view 的映射。虽然这里可以包含所有的 url,但是更常见的做法是把应用相关的 url 包含在相关应用中,可以在接下来的教程里看到。
  • wsgi.py 帮助 Django 应用和网络服务器间的通讯。可以把这个当作模板。

manage.py脚本可以创建应用,和数据库通讯,启动开发用网络服务器。

2.2 创建catalog应用

python3 manage.py startapp catalog

2.2 注册catalog应用

打开项目设置文件 locallibrary/locallibrary/settings.py 找到 INSTALLED_APPS 列表里的定义。 如下所示,在列表的最后添加新的一行。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'catalog.apps.CatalogConfig',
]

🌟tips:

(1)新的这行详细说明了应用配置文件在 (CatalogConfig) /locallibrary/catalog/apps.py 里,当你创建应用时就完成了这个过程。

(2)注意到INSTALLED_APPS已经有许多其他的应用了 (还有 MIDDLEWARE, 在 settings 的下面)。这些应用为 Django administration site 提供了支持和许多功能 (包括会话,认证系统等)

2.3 配置数据库

//***为避免性能上的差异,最好在生产和开发中使用同一种数据库。在这个项目里,我们使用 SQLite。

***//

2.4 其他项目设置

改时区

TIME_ZONE = 'Asia/Beijing'

//安全注意⚠️

  • SECRET_KEY. 这个密匙值是 Django 网站安全策略的一部分。如果在开发环境中没有包好这个密匙,把代码投入生产环境时最好用不同的密匙代替。(可能从环境变量或文件中读取)。
  • DEBUG. 这个会在 debug 日志里输出错误信息,而不是输入 HTTP 的返回码。在生产环境中,它应设置为 false,因为输出的错误信息会帮助想要攻击网站的人。
  • //

2.5 链接url映射器

将新的项添加到 urlpatterns 列表中。

# Use include() to add paths from the catalog application
from django.conf.urls import include
from django.urls import path

urlpatterns += [
    path('catalog/', include('catalog.urls')),
]

 把网站的根 URL(例:127.0.0.1:8000) 重定向到该 URL:127.0.0.1:8000/catalog/

将以下行再次添加到文件的底部:

#Add URL maps to redirect the base URL to our application
from django.views.generic import RedirectView
urlpatterns += [
    path('', RedirectView.as_view(url='/catalog/')),
]

 Django 默认不提供 CSS, JavaScript, 和图片等静态文件 。可以通过添加以下行在开发期间启用静态文件的服务。

# Use static() to add url mapping to serve static files during development (only)
from django.conf import settings
from django.conf.urls.static import static

urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

 在 catalog 文件夹下创建一个名为 urls.py 的文件,并添加以下文本以定义导入(空)的 urlpatterns。这是我们在编写应用时添加式样的地方。

 2.6 测试网站框架

(1)运行数据库迁移

//Django 使用对象关系映射器(ORM)将 Django 代码中的模型定义映射到底层数据库使用的数据结构。//

运行以下命令来定义数据库中这些模型的表(确保你位于包含 manage.py 的目录中):

python3 manage.py makemigrations
python3 manage.py migrate

 (2)运行网站

通过调用 runserver 命令运行 Web 服务器

python3 manage.py runserver

 

//现在已经创建了一个完整的基本网站项目骨架,你可以继续填加网址,模型,视图和模版。

3、使用模型创建图书馆网站02

3.1 设计图书馆模型

//Django 允许你定义一对一 (OneToOneField),一对多 (ForeignKey) 和多对多 (ManyToManyField) 的关系

//模型通常在应用程序的Models .py文件中定义。它们被实现为django.db.models的子类。

Django Tutorial Part 3: 使用模型 - 学习 Web 开发 | MDNIn this article we've learned how models are defined, and then used this information to design and implement appropriate models for the LocalLibrary website.https://developer.mozilla.org/zh-CN/docs/Learn/Server-side/Django/Models

from django.db import models

class MyModelName(models.Model):
    """
    A typical class defining a model, derived from the Model class.
    """

    # Fields
    my_field_name = models.CharField(max_length=20, help_text="Enter field documentation")
    ...

    # Metadata
    class Meta:
        ordering = ["-my_field_name"]

    # Methods
    def get_absolute_url(self):
            """
            Returns the url to access a particular instance of MyModelName.
            """
            return reverse('model-detail-view', args=[str(self.id)])

    def __str__(self):
        """
        String for representing the MyModelName object (in Admin site etc.)
        """
        return self.field_name

创建和修改记录

# Create a new record using the model's constructor.
a_record = MyModelName(my_field_name="Instance #1")

# Save the object into the database.
a_record.save()

# Access model field values using Python attributes.
print(a_record.id) #should return 1 for the first record.
print(a_record.my_field_name) # should print 'Instance #1'

# Change record by modifying the fields, then calling save().
a_record.my_field_name="New Instance Name"
a_record.save()

存储关于图书类别的信息:

class Genre(models.Model):
    """
    Model representing a book genre (e.g. Science Fiction, Non Fiction).
    """
    name = models.CharField(max_length=200, help_text="Enter a book genre (e.g. Science Fiction, French Poetry etc.)")

    def __str__(self):
        """
        String for representing the Model object (in Admin site etc.)
        """
        return self.name

使用CharField来表示图书的标题和isbn:

from django.urls import reverse #Used to generate URLs by reversing the URL patterns

class Book(models.Model):
    """
    Model representing a book (but not a specific copy of a book).
    """
    title = models.CharField(max_length=200)
    author = models.ForeignKey('Author', on_delete=models.SET_NULL, null=True)
    # Foreign Key used because book can only have one author, but authors can have multiple books
    # Author as a string rather than object because it hasn't been declared yet in the file.
    summary = models.TextField(max_length=1000, help_text="Enter a brief description of the book")
    isbn = models.CharField('ISBN',max_length=13, help_text='13 Character <a href="https://www.isbn-international.org/content/what-isbn">ISBN number</a>')
    genre = models.ManyToManyField(Genre, help_text="Select a genre for this book")
    # ManyToManyField used because genre can contain many books. Books can cover many genres.
    # Genre class has already been defined so we can specify the object above.

    def __str__(self):
        """
        String for representing the Model object.
        """
        return self.title


    def get_absolute_url(self):
        """
        Returns the url to access a particular book instance.
        """
        return reverse('book-detail', args=[str(self.id)])

BookInstance表示某人可能会借阅的一本书的特定副本,并包括关于该副本是否可用、预期归还日期、“印记”或版本详细信息以及图书馆中该书的惟一id的信息:

import uuid # Required for unique book instances

class BookInstance(models.Model):
    """
    Model representing a specific copy of a book (i.e. that can be borrowed from the library).
    """
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, help_text="Unique ID for this particular book across whole library")
    book = models.ForeignKey('Book', on_delete=models.SET_NULL, null=True)
    imprint = models.CharField(max_length=200)
    due_back = models.DateField(null=True, blank=True)

    LOAN_STATUS = (
        ('m', 'Maintenance'),
        ('o', 'On loan'),
        ('a', 'Available'),
        ('r', 'Reserved'),
    )

    status = models.CharField(max_length=1, choices=LOAN_STATUS, blank=True, default='m', help_text='Book availability')

    class Meta:
        ordering = ["due_back"]


    def __str__(self):
        """
        String for representing the Model object
        """
        return '%s (%s)' % (self.id,self.book.title)

该模型将作者定义为具有名、姓、出生日期和(可选)死亡日期。它指定在默认情况下,__str__()返回姓、名顺序的名称。get_absolute_url()方法反转作者-细节URL映射,以获取用于显示单个作者的URL:

class Author(models.Model):
    """
    Model representing an author.
    """
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    date_of_birth = models.DateField(null=True, blank=True)
    date_of_death = models.DateField('Died', null=True, blank=True)

    def get_absolute_url(self):
        """
        Returns the url to access a particular author instance.
        """
        return reverse('author-detail', args=[str(self.id)])


    def __str__(self):
        """
        String for representing the Model object.
        """
        return '%s, %s' % (self.last_name, self.first_name)

❤️❤️重新运行数据库迁移,将它们添加到数据库中

python3 manage.py makemigrations
python3 manage.py migrate

 

 3、dgango管理网站

3.1 注册模型

/locallibrary/catalog/admin.py) 中打开 admin.py,复制以下到文件的底部来注册模型。该代码简单地导入模型,调用 admin.site.register 来注册它们。

from .models import Author, Genre, Book, BookInstance

admin.site.register(Book)
admin.site.register(Author)
admin.site.register(Genre)
admin.site.register(BookInstance)

 3.2 创建超级用户

python3 manage.py createsuperuser

 3.3 登入并使用网站

重新启动

python3 manage.py runserver

访问http://127.0.0.1:8000/admin

使用刚刚注册的用户、密码可登录

 4、部署

Django 教程 11: 部署 Django 到生产环境 - 学习 Web 开发 | MDN现在,您已经创建(并测试)了一个令人敬畏的LocalLibrary网站,如果您希望将其安装在公共 Web 服务器上,以便图书馆工作人员和成员可以通过 Internet 访问它。本文概述了如何找到主机来部署您的网站,以及您需要做什么才能让您的网站准备好生产。https://developer.mozilla.org/zh-CN/docs/Learn/Server-side/Django/Deployment

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: Django是一个基于Python的Web框架,它提供了一系列工具和库,帮助开发快速构建高质量的Web应用程序。使用Django框架搭建Web应用程序,可以大大提高开发效率和代码质量。Django框架具有强大的ORM(对象关系映射)功能,可以轻松地与数据库进行交互。此外,Django还提供了一系列内置的功能,如用户认证、表单验证、缓存、国际化等,使得开发者可以更加专注于业务逻辑的实现。搭建Django框架需要掌握Python语言和Web开发基础知识,同时需要了解Django框架的基本概念和使用方法。 ### 回答2: Django 是一个基于 Python 语言的开源 Web 应用框架。它采用了模型-视图-控制器(MVC)的软件设计模式,致力于简化 Web 开发的各个方面。Django框架广泛应用于各种规模的Web应用程序的开发中。下面我们将着重介绍如何使用 Django 搭建一个Web应用。 1.安装PythonDjango 在开始之前, 你需要先安装 PythonDjango。在安装 Python 时,一般会附带安装 pip 包管理工具。安装完成之后,在命令行中执行以下命令安装 Django: pip install django 2.创建Django项目 使用以下命令创建一个新的 Django 项目: django-admin startproject projectname 这将会创建一个名为 projectname 的项目目录,其中包含一个 manage.py 文件和一个名为 projectname 的子目录。projectname 为项目的名称,可以自己指定,如果需要更改名称也可以在 manage.py 中调整命令即可。 3.创建Django应用 在 Django 中,应用程序是指某项特定功能的代码集合。应用程序通常是跨越多个项目重用的,因此应用程序是 Django 中的重要概念之一。要使用 Django 创建一个应用程序,请使用以下命令: python manage.py startapp appname 这会创建一个包含一个名为 appname 的子目录的应用程序。应用程序名称可以自己指定,如果需要更改名称,则可以在 manage.py 中调整命令即可。 4.设置数据库 Django 默认使用 SQLite 作为默认数据库。如果你需要使用其他数据库,则需要在 settings.py 文件中进行设置,并安装相应的数据库依赖库和Django应用程序包。 5.创建Web页面 在 Django 中,Web 页面被称为视图(Views)。视图在应用程序的 views.py 文件中定义。在视图内容中,你可以定义需要响应用户请求的内容,并可以通过模型获取数据。同时,你可以使用 Django 提供的模板引擎来定义响应用户请求的页面。 6.启动Django应用 使用以下命令启动 Django 应用: python manage.py runserver 这会启动一个 Web 服务器,该服务器将 Web 应用程序作为一个本地服务运行,可以在浏览器中访问 Web 应用程序。 以上就是 Django 应用程序的基本搭建流程,可以根据需要继续在该框架中进行开发并优化。同时,Django 也提供了丰富的文档和社区资源,方便开发者进行学习和交流。 ### 回答3: DjangoPython Web框架中的一个高级框架,它应用广泛,因为它提供了快速而方便的Web应用程序开发Django的设计哲学是DRY即"Don't Repeat Yourself(不重复自己)”,意味着使用Django进行开发会使得我们的代码更为简洁、易于维护;同时,可以轻松地集成第三方模块、库和模板。本篇文章将介绍如何使用Django框架搭建一个简单的Web应用程序。 首先,我们需要安装Django。使用pip install django命令即可。此外,还需要安装所需的依赖包和库。 接下来,我们可以使用Django的命令行工具来创建一个新的Django项目。使用命令django-admin startproject projectname即可创建一个新项目,其中projectname为你的项目名称。创建完成后,可以进入该项目所在目录。 Django项目中包含了一些重要的文件和目录。其中,文件manage.py是管理和控制该Django项目的核心文件,大部分操作都需要使用该文件来完成。而目录projectname中包含了项目的设置和配置文件,包括数据库配置、路由设置和应用程序配置等等。接下来,我们需要创建一个新的应用程序。使用python manage.py startapp appname命令创建一个新应用程序,其中appname为你的应用程序名称。 创建应用程序后,我们需要在项目的设置文件(projectname/settings.py)中注册该应用。可以将appname添加到该文件中的INSTALLED_APPS设置中。 接下来,我们需要配置路由。Django支持两种类型的路由:URLconf和视图函数。我们可以在应用程序中创建视图函数,然后在路由设置文件中为其分配一个URL。Django的URL解析器会扫描这些URL和视图函数,然后根据它们之间的映射在请求到达时调用正确的视图函数。 最后,我们需要编写视图函数和模板。Django中的视图函数是负责渲染网页的Python函数。视图函数需要获取请求,并返回一个响应。我们可以使用Django的视图装饰器来装饰这些视图函数,以便处理相关的请求类型和数据。 而模板则是为Django应用程序提供的一种用于生成HTML网页的脚本语言(比如Django的JS界面)。Django模板引擎提供了许多内置的标记和过滤器,用于定制应用程序的模板。在模板中,可以使用类似Python的语言结构、变量和标记来生成HTML代码。Django的模板语言对前端开发工程师非常友好。 另外,Django还提供了许多其他功能,如表单验证、管理后台和缓存,这些都可以方便我们快速搭建出一个Web应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

haoaaao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值