使用Django进行Web的开发

Django

开源的web应用框架,采用MTV的框架模式,推荐进行快速开发。
欢迎Star和Fork我的ETP哦
ETP码云链接

MTV模式

MTV框架模式指的是模型M,视图V和模板T。
M:Model Django使用Model来定义数据库表,并且使用Model来自动生成数据库表,并且Django使用自己的ORM进行数据库操作,与后续是什么数据库并无关系。Django会自动为你生成数据库之间的关联关系,以及数据库的中间表。
T:Template Django使用html来编写Template,用来进行与用户的数据交互。html中使用django定义好的一些标签进行数据的操作。
V:View Django使用View进行数据接收与处理返回。
可以类比MVC框架进行理解。

Django创建工程

django中自带了一些命令,使用django-admin命令可以用来进行工程项目的创建:

django-admin startproject django_web

startproject 用来创建项目 django_web为项目的名称
项目的目录结构
在这里插入图片描述
其中 settings.py 是项目的一些配置
urls.py 是项目的路由配置
templates 文件夹用来存放我们编写的template,也就是html文件

Django创建APP

Django对于应用我们使用 manage.py 进行APP的创建

manage.py startapp learning_logs

manage.py 提供了很多与django进行交互的方法,startapp 用来进行APP的创建 learning_logs 就是我们创建的APP的名称。
创建后的目录结构为:
在这里插入图片描述
创建完APP之后需要在settings中安装该APP

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'bootstrap3',
    'learning_logs',
    'users',
]

URL文件各个APP管理各自URL

learning_logs/urls.py

from django.urls import path,re_path
from . import views
app_name='learning_logs'

urlpatterns = [
    re_path(r'^$',views.index,name='index'),
    re_path(r'^topics/$',views.topics,name='topics'),
    re_path(r'^topics/(?P<topic_id>\d+)/$',views.topic,name='topic'),
    re_path(r'^new_topic/$',views.new_topic,name='new_topic'),
    re_path(r'^new_entry/(?P<topic_id>\d+)/$',views.new_entry,name='new_entry'),
    re_path(r'^edit_entry/(?P<entry_id>\d+)/$',views.edit_entry,name='edit_entry'),
]

django_web/urls.py

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

urlpatterns = [
    path('admin/', admin.site.urls),
    re_path(r'^learning_logs/', include('learning_logs.urls','learning_logs')),
    re_path(r'^users/', include('users.urls','users')),
]

在django_web下的urls.py文件中我们包含了APP下的urls.py,并且给了相应的命名空间
在learning_logs下的urls.py 文件中我们定义了learning_logs APP的url。这样我们就可以进行每个APP管理每个APP的url,否则所有的APP的URL都放到一起会非常多非常难以维护。

用户使用

我们沿用django提供的用户进行我们注册登录注销的开发
首先创建APP users
安装APP users
在djang_web中配置users的urls关联
定义users的请求urls

from django.urls import path,re_path
from django.contrib.auth.views import LoginView
from . import views

app_name='users'

urlpatterns = [
    re_path(r'^login/$',LoginView.as_view(template_name='users/login.html'),name='login'),
    re_path(r'^logout/$',views.logout_view,name='logout'),
    re_path(r'^register/$',views.register,name='register'),
]

我们使用了django自带的登录视图LoginView
创建users/templates/users/login.html 和register.html文件
login.html

{% extends "learning_logs/base.html" %}
{% load bootstrap3 %}

{% block header %}
    <h2>Log in to your account</h2>
{% endblock header %}


{% block content %}
    {% if form.errors %}
        <p>Your username and password didn't match.Please try again.</p>
    {% endif %}

    <form method="post" action="{% url 'users:login' %}" class="form">
        {% csrf_token %}
        {% bootstrap_form form %}
        {% buttons %}
            <button name="submit" class="btn btn-primary">log in</button>
        {% endbuttons %}
        <input type="hidden" name="next" value="{% url 'learning_logs:index' %}"/>
    </form>
{% endblock content %}

register.html

{% extends "learning_logs/base.html" %}
{% block content %}
    <form method="post" action="{% url 'users:register' %}">
        {% csrf_token %}
        {{ form.as_p }}
        <button name="submit">register</button>
        <input type="hidden" name="next" value="{% url 'learning_logs:index' %}">
    </form>
{% endblock content %}

编写users/views.py的处理逻辑

from django.shortcuts import render
from django.contrib.auth import logout,authenticate,login
from django.http import HttpResponseRedirect
from django.urls import reverse
from django.contrib.auth.forms import UserCreationForm
# Create your views here.

def logout_view(request):
    logout(request)
    return HttpResponseRedirect(reverse('learning_logs:index'))


def register(request):
    if request.method != 'POST':
        form = UserCreationForm()
    else:
        form = UserCreationForm(data=request.POST)
        if form.is_valid():
            new_user = form.save()
            authenticated_user = authenticate(username=new_user.username,password=request.POST['password1'])
            login(request,authenticated_user)
            return HttpResponseRedirect(reverse('learning_logs:index'))

    context = {'form':form}
    return render(request,'users/register.html',context)

这里面用到learning_logs配置的base.html我们可以进行html的继承,每次我们不用写那么多的html,哪里需要变动我们就改动哪里就行了。

详细代码参见我上传的资源、

https://download.csdn.net/download/u013302586/11238141

django集成rest_framework

前后端分离,后端只负责处理前端展示的数据。前端究竟怎么渲染完全靠前端处理。在前后端分离的应用模式中,我们通常将后端开发的每一视图都称为一个接口,或者API,前端通过接口来对数据进行增删改查。

resf framework为什么适合django开发restful风格的接口

rest framework有以下特点:

  • 提供了定义序列化Serializer的方法,可以快速根据Django ORM或者其他库自动序列化/反序列化
  • 提供了丰富的类视图\MIXIN扩展类,简化视图的编写。
  • 丰富的定制层级,到自动生成API,满足各种需要
    • 函数视图
    • 类视图
    • 视图结合
  • 多种身份认证和权限认证方式的支持
  • 内置了限流系统
  • 直观的API web界面
  • 可扩展性,插件丰富

采用Rest Framework前后会有什么区别

  1. 多了个Serializers文件
    文件的作用是Serializer把querysets和model instance这些复杂的数据结构转化为native python,以便于json,xml或其他内容类型的形式render出去
  2. 视图的核心功能变了
    将数据库数据序列化为前端需要的格式,并且返回
    将前端发送过来的数据反序列化为模型类对象,并且保存到数据库中。

创建Rest Framework的Django项目

Django中的概要

概要是一种机器可读文档,用于描述可用的API路径,其URLS以及他们支持的操作。
概要可以是自动生成文档的有用工具,也可以用于驱动可以与API进行交互的动态客户端库。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django是一个高级的Python Web框架,它具有完整的MVC架构、易于拓展、高效、模块化、安全性高等优点。Django诞生于2003年,由德国人Adrian Holovaty和美国人Simon Willison在比利时首都布鲁塞尔创建,目的是为了开发新闻类网站。现在它已成为Python Web开发中最受欢迎和最成熟的框架之一,许多大公司都在使用Django进行Web开发Django的设计理念是DRY(Don't Repeat Yourself),即不重复原则,它的核心思想是将固定的模块化功能封装起来,让开发者更加关注业务逻辑的实现。Django支持ORM方式对数据库进行操作,它可以自动创建数据库结构,还可以自动验证数据。Django还提供了内置的管理后台,可以快速创建一个管理后台,实现增删改查等基本操作。同时,Django还拥有强大的验证和安全机制,能够防止SQL注入等常见的攻击方式。 Django的拓展性很高,提供了很多方便的插件和工具,通过pip安装即可使用,如Django REST framework可以轻松实现RESTful API,Django Haystack可以方便地连接搜索引擎。Django也提供了强大的缓存机制,支持内存、文件、数据库等多种缓存方式,并且可以轻松实现分布式缓存。 总之,Django是一种高效、灵活和可扩展的Web开发框架,无论你是小型企业还是大型企业,使用Django进行开发都能够让你的Web应用更加高效、安全、易于拓展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值