精华内容
下载资源
问答
  • Vue+Django项目实战——学习目录
    千次阅读
    2020-08-17 08:38:08

    项目来自慕课网-前端vue结合后端DjangoFramework的在线生鲜超市

    项目介绍

    1.1.掌握的技术

    1. Vue + Django Rest Framework 前后端分离技术
    2. 彻底玩转restful api 开发流程 Django Rest
    3. Framework 的功能实现和核心源码分析
    4. Sentry 完成线上系统的错误日志的监控和告警
    5. 第三方登录和支付宝支付的集成
    6. 本地调试远程服务器代码的技巧

    1.2.系统构成

    1. vue前端项目
    2. django rest framework 系统实现前台功能
    3. xadmin后台管理系统

    vue部分:

    • API 接口
    • Vue 组件 与api的交互
    • vue的项目组织结构分析

    Django Rest Framework 技能

    • 通用view实现 rest
      api接口apiview方式实现apigenericView方式实现api接口Viewset和router方式实现api接口和url配置Django_filter
      searchFilter OrderFilter 分页通用mixin
    • 权限和认证;Authentication用户认证设置动态设置permission、authenticationValidators实现字段验证
    • 序列化和表单验证SerializerModelSerializer动态设置Serializer
    • 支付登录注册json web token 实现登录手机注册支付宝支付第三方登录
    • 进阶开发Django rest framework 部分核心源码解读文档自动化管理django rest
      framework的缓存throttling 对用户和ip进行限速

    1.3.开发中常见的问题

    • 本地系统不能重现的bug
    • api接口出错不能及时的发现或难以找到错误栈
    • api文档管理问题,html markdown
    • 大量的url配置造成url配置越来越多难以维护
    • 接口不及时去更新文档,对方不知道如何去测试接口,但写文档会花费大量的时间去维护.
    • 为了防止爬虫,我们需要针对api的访问频率进行限制,比如一分钟,一小时,或者一天用户的访问频率限制问题。
    • 某些页面将数据放入缓存,加速某些api的访问速度

    1.4.开发中常见问题解决方案

    1. 通过介绍pycharm 的远程服务器代码调试技巧让大家不仅可以调试支付,第三方登录,还可以远程服务器代码来重现服务器上的bug
    2. 通过docker 搭建 sentry 来体验错误日志监控系统,让我们不仅可以得到线上的错误栈还能及时在发生系统错误时收到邮件通知。
    3. 通过drf的文档自动化管理以及url的注册管理功能会让我们省去写文档的时间
    4. django rest framework
      的文档管理功能不仅可以让我们省去写文档的时间,还能直接在文档里面测试接口,自动生成js接口代码,shell测试代码和python测试代码
    5. django rest framework 提供的throttle 对于api进行访问频率的限制
    6. 引入第三方框架来设置某些api的缓存

    1.5.django进阶知识点

    • django mirgrations原理
    • django 信号量
    • django从请求到响应的完整过程
    • 独立使用django的model

    1.6.vue知识点

    • vue技术选型分析
    • API后端数据填充到Vue组件模板
    • Vue代码结构分析

    1.7.章节安排

    • 项目介绍以及开发环境的搭建
    • 设计数据库以及导入原始数据
    • restful api基础以及vue项目结构介绍
    • 商品列表页功能
    • 商品类别功能
    • 手机注册和用户登录
    • 商品详情页和收藏功能
    • 个人中心功能
    • 购物车、订单和支付宝支付功能
    • 首页,商品相关数量,缓存,访问限速功能
    • 第三方登录(微博 qq 微信)
    • sentry系统错误日志监控

    1.8.技术储备要求

    1. django基础知识
    2. 熟练掌握python语法
    3. 了解vue & mysql基础

    1.9.系统功能

    1. 分类 - 子分类 搜索 热搜词 购物车简要展示
    2. 新品 分类展示, 大类的推荐商品。
    3. 账户密码登录(json web token)。微博登录,输入账户跳转回首页。
    4. 注册,手机号码注册,错误提示。倒计时功能,服务器端手机号码发送频次限制。
    5. 商品大类,导航栏。筛选,排序。富文本。
    6. 商品 收藏 加入购物车 结算,移出购物车
    7. 留言 支付宝支付,扫码支付。跳回商户页面。
    8. 订单详情,收货地址
    9. 个人信息,收藏商品,我的收藏。
    10. 留言,上传文件。提交,删除留言
    11. 快速浏览,页面的缓存
    12. 访问速度限制 & 接口文档 测试交互
    13. 出错处理: sentry基于drf。打印错误栈,当前请求用户。邮件通知
    更多相关内容
  • Django框架+项目实战

    2021-06-10 17:15:53
    本课程主要讲解Python Web开发中,Django框架的使用;并以商品管理模块为实际案例,让学习者熟练掌握框架并灵活运用于项目开发。
  • python django + mysql 开发的入门级博客项目,用于学习,包含complist.txt组件列表,直接pip install -r complist.txt即可安装该项目需要的组件。 该项目包含管理端的开发,持久化相关方法学习,admin管理端的二次...
  • Django项目实战(附源码免费下载)

    千次阅读 热门讨论 2020-04-19 10:13:32
    制作图书管理系统 第一步先更改settings.py里面的必要配置,更改或附件项如下 ... 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contr...

    制作图书管理系统(末尾附源码)
    第一步先更改settings.py里面的必要配置,更改或附件项如下

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',  
        'front', #注册front
    ]
    
    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        # 'django.middleware.csrf.CsrfViewMiddleware', 将此项先注释掉,避免post请求失败
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ]
    
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR,'templates/')], #添加html文件的路径
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
                'builtins':['django.templatetags.static'] #写入此项,后续添加static标签不用load
            },
        },
    ]
    
    数据库更改
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME':'test',
            'PORT':'3306',
            'USER':'root',
            'PASSWORD':'123456',
            'HOST':'localhost',
        }
    }
    

    urls.py里面加载文件路径如下:

    urlpatterns = [
        path('',views.index,name='index'),
        path('add_book',views.add_book,name='add_book'),
        path('book_detail/<int:bid>/',views.book_detail,name='book_detail'),
        path('delete',views.delete,name='delete'),
    ]
    

    在templates文件夹下创建base.html作为其他页面继承的模板

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>图书管理系统</title>
        <link rel="stylesheet" href="{% static 'front/base.css' %}">
    </head>
    <body>
    <nav>
        <ul class="nav">
            <li><a href="{% url 'index' %}">首页</a></li>
            <li><a href="{% url 'add_book' %}">增加图书</a></li>
        </ul>
    </nav>
    
    {% block content %}
    
    {% endblock %}
    </body>
    </html>
    

    首页index.html继承例子如下

    {% extends 'base.html' %}
    {% block content %}
    <table>
        <thead>
            <tr>
                <th>序号</th>
                <th>书名</th>
                <th>作者</th>
            </tr>
        </thead>
        <tbody>
            {% for book in books %}
                <tr>
                    <td>{{ forloop.counter }}</td>
                    <td><a href="{% url 'book_detail' bid=book.0 %}">{{ book.1 }}</a></td>
                    <td>{{ book.2 }}</td>
                </tr>
            {% endfor %}
    
        </tbody>
    </table>
    {% endblock %}
    

    添加图书页面

    {% extends 'base.html' %}
    
    {% block content %}
    
        <form action="#" method="post">
            <table>
            <tr>
                <td>书名:</td>
                <td><input type="text" name="bname"></td>
            </tr>
            <tr>
                <td>作者:</td>
                <td><input type="text" name="author"></td>
            </tr>
            <tr>
                <td></td>
                <td><input type="submit" value="提交"></td>
            </tr>
            </table>
        </form>
    {% endblock %}
    

    模板渲染的css文件 base.css

    *{
        margin: 0;
        padding: 0;
    }
    
    
    .nav{
        height: 65px;
        background: black;
        overflow: hidden;
    }
    
    .nav li{
        float: left;
        line-height: 65px;
        list-style: none;
        margin: 0 20px;
    }
    
    .nav li a{
        color: white;
        text-decoration: none;
    }
    
    .nav li a:hover{
        color: aqua;
    }
    

    add_book.html (添加图书页面代码)

    {% extends 'base.html' %}
    
    {% block content %}
    
        <form action="#" method="post">
            <table>
            <tr>
                <td>书名:</td>
                <td><input type="text" name="bname"></td>
            </tr>
            <tr>
                <td>作者:</td>
                <td><input type="text" name="author"></td>
            </tr>
            <tr>
                <td></td>
                <td><input type="submit" value="提交"></td>
            </tr>
            </table>
        </form>
    {% endblock %}
    

    图书详情页代码 book_detail.html

    {% extends 'base.html' %}
    {% block content %}
    <p>{{ book.0 }}</p>
    <p>{{ book.1 }}</p>
    <p>{{ book.2 }}</p>
        <form action="{% url 'delete' %}" method="post">
            <input type="hidden" name="bid" value="{{ book.0 }}">
            <input type="submit" value="删除图书">
        </form>
    {% endblock %}
    

    示例效果
    在这里插入图片描述
    在这里插入图片描述

    点击进入源码下载地址
    https://download.csdn.net/download/mostermoonsky/12339379

    展开全文
  • Django企业开发实战.源码
  • Python基于Django实战项目源码——美多商城 Python基于Django实战项目源码——美多商城 Python基于Django实战项目源码——美多商城 Python基于Django实战项目源码——美多商城 Python基于Django的...
  • Django实战源码(第一、第二版)源码,亲测可正常运行
  • Django项目实战(1)

    2020-08-26 22:37:17
    Django项目实战Django开始第一个Demo Django 从今天开始进行Django项目实战系列更新,希望这系列笔记,能给帮助到和我一样正在学习路上的你和我! 开始第一个Demo 使用下面的命令创建一个名为mysite的项目 django-...

    Django

    从今天开始进行Django项目的实战系列更新,希望这系列笔记,能给帮助到和我一样正在学习路上的你和我!

    Django中请求处理流程

    因为之前没有Web开发的经验,本身也是转行到计算机这个领域中来,之前也折腾过很长的时间,视频教程、博客、国内的书籍等等,各有利弊,所以这几天看了一些国外的书籍,国外的书籍相比较于国内的更新速度更快,这是很大的一个优点,再就是觉得还是看书比较的系统掌握像Django这样的框架,高屋建瓴的了解一些思想、逻辑会有助于理解框架的代码细节。

    这里先回忆昨天学习的成果。相比较于Java Spring全家桶的开发工作来说,Django的开发工作明显较少,很多事情Django都已经帮助你完成了,因此开发速度快速,但是对于大型服务系统来说,是不是鲁棒性会差一点??(这里还不是很懂,请大家指教)

    在这里插入图片描述

    1、 用户通过浏览器请求一个页面(上传数据、点击访问等等)
    2、请求到达Request Middlewares,中间件对request做一些预处理或者直接response请求
    3、URLConf通过urls.py文件和请求的URL找到相应的View()
    4、View Middlewares被访问,它同样可以对request做一些处理或者直接返回response
    5、调用View中的函数
    6、View中的方法可以选择性的通过Models访问底层的数据
    7、所有的Model-to-DB的交互都是通过manager(QuerySet)完成的
    8、如果需要,Views可以使用一个特殊的Context
    9、Context被传给Template用来生成页面
      a.Template使用Filters和Tags去渲染输出
      b.输出被返回到View
      c.HTTPResponse被发送到Response Middlewares
      d.任何Response Middlewares都可以丰富response或者返回一个完全不同的response
      e.Response返回到浏览器,呈现给用户

    可以从流程图中看出Middleware(中间件,包括request、view、exception、response)发挥了很重要的作用,这里暂未涉及,先不讨论。
    参考:https://www.cnblogs.com/lyq-biu/p/9626234.html、https://segmentfault.com/a/1190000002399134

    URLConf(URL映射):就像是Django所支撑网站的目录。本质是URL模式以及要为该URL模式调用的视图函数(view)之间的映射表。就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。例如,当用户访问/foo时,调用视图函数foo_view(),视图函数存在于views.py中。
    在执行创建项目的时候,会自动创建一个URLConf(就是项目的urls.py)。在同时创建的settings.py文件中,还有一个变量ROOT_URLCONF,其变量的值就是根(项目文件夹下的)URLconf的模块名。默认值是urls.py文件的模块名。

    ###Django application组织原则

    实际上,每个 Django App(Application) 的组织结构符合 Django 的 MTV 法则——Model (模型)+ Template (模板)+ View (视图)。MTV 与大家比较熟悉的 MVC 在思想上非常相似,但是命名有比较大的出入,如下表所示:
    在这里插入图片描述
    区别:
      MVC中的View的目的是「呈现哪一个数据」,而MTV的View的目的是「数据如何呈现」。

    也就是把MVC中的View分成了视图(展现哪些数据)模板(如何展现) 2个部分,而Contorller这个要素由框架自己来实现了,我们需要做的就是把(带正则表达式的)URL对应到视图就可以了,通过这样的URL配置,系统将一个请求发送到一个合适的视图。

    https://www.cnblogs.com/wqzn/p/10009217.html、https://blog.csdn.net/YangHeng816/article/details/52213983

    理解视图(views):业务逻辑的编写

    创建Application之后,下一步就是编写业务逻辑和接入路由,完成访问了。

    如前所述Django中的Project目录和application目录下分别有urls.py文件

    分别负责不同的功能:
    一个是全局路由,一个是子应用路由组成。简单来说,根据用户输入的 URL,全局路由表进行匹配并选择正确的子应用路由,再由所选择的子应用路由匹配并选择正确的视图( View )。整个流程如下图所示:

    在这里插入图片描述
    例如,用户访问 example.com/apple/buy,然后全局路由根据 /apple/buy 先选择 apple 的路由表,再从 apple 路由表中根据 /buy 选择 /buy 路由,然后执行 /buy 对应的 BuyView 视图,返回给用户结果。

    编写第一个视图

    首先打开 news/views.py ,写一个简单的视图函数,返回一串 Hello World!

    from django.http import HttpResponse
    
    def index(request):
        return HttpResponse('Hello World!')
    

    上面这个 index 函数可以说是一个最简单的视图函数了,实际大部分应用的视图要比这复杂得多。Django 同时支持基于函数的视图( FBV,Function-based View )和基于类的视图( CBV,Class-based View ),这里显然是 FBV,接收一个 request 请求对象作为参数,返回了一个 HttpResponse 对象。

    将视图接入路由(view.py–>urils.py)

    接着,我们要让路由系统能够访问到刚才写好的视图函数。因此先实现子应用news 的路由表,创建 news/urls.py 文件如下:

    from django.urls import path
    from . import views
    urlpatterns = [
        path('', views.index, name='index'),
    ]
    

    每一个 Django 路由表模块( urls.py )中都约定必须包含一个 urlpatterns 列表用来存放路由映射表。列表中每个元素是一个用 django.urls.path 函数封装好的路由映射,通常接收以下三个参数:

    • route:必须,即实际的访问路由,空字符串等于 /,即空路由
    • view:必须,该路由将要访问的视图(重要参数)
    • name:可选,该路由的名称,方便后续在模板中使用

    我们将刚刚写好的 news 路由表接入全局路由表。由于我们希望新闻能够展示在首页(即通过 / 就能访问,无需/news),因此 news 应用路由在全局路由中的 URL 是一个空字符串。在 django_news/urls.py 中修改如下:

    from django.contrib import admin
    from django.urls import path, include
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        ## route为空字符串
        path('', include('news.urls')),
    ]
    

    这里使用django.urls.include 函数将 news 应用的路由表接入进来,并且 include 函数的参数是路由模块路径的字符串news.urls,省去了手动 import 的麻烦(写法并不规范,不要学习此示例写法。这里记录的目的是为了学习Django流程化的开发思路)。

    注意

    添加路由规则时顺序是很重要的,因为在尝试匹配时会按照从上到下的顺序进行,因此应该把最模糊的路由(即空路由)放在最下面。

    现在已经完成了一个非常简单的demo开发工作。

    理解模板:网页前端的实现

    想想前面我们做了什么?我们首先定义了view(视图)、定义了urls.py(主路由和子应用路由),完成了一次访问配置。接下来,我们将实现一个 Django 模板作为网页前端,从而给用户呈现更丰富的内容。

    Django模板语言基础

    表达式插值

    最常用的语法,没有之一。通过在一对花括号{{}} 放入一个表达式,就能够在视图(views)中传入表达式中变量的内容,并最终渲染成包含变量具体内容的 HTML 代码。需要注意的是,所支持的表达式仅支持以下形式(可以自由组合):

    <!-- 单个变量 -->
    {{ variable }}
    
    <!-- 获取字典的键或对象的属性 -->
    {{ dict.key }}
    {{ object.attribute }}
    
    <!-- 获取列表中的某个元素 -->
    {{ list.0 }}
    

    例如,模板这样写:

    <h1>{{ name }}</h1>
    <p>{{ news.title }}</p>
    <p>{{ news.visitors.0 }}</p>
    

    如果我们在视图中(view)传入以下上下文字典( Context Dictionary ):

    {
        'name': 'Tuture',
        'news': {
            'title': 'Hello World',
            'visitors': ['Tom', 'Marc'],
        }
    }
    

    那么最终渲染成的HTML代码就是:

    <h1>Tuture</h1>
    <p>Hello World</p>
    <p>Tom</p>
    
    条件语句

    条件语句的定义如下:

    {% if is_true %}
      <h1>It is true!</h1>
    {% else %}
      <h1>It is false!</h1>
    {% endif %}
    

    如果变量 is_true 为真,那么最终渲染出来的就是 <h1>It is true!</h1>,否则就是 <h1>It is false!</h1>。注意:整个条件语句必须以 {% endif %} 结束,并且 {% else %} 是可选的。

    循环语句

    https://v2ex.com/t/663675

    理解模型(model):和数据库的联动

    • 由于高度解耦的设计,可轻松切换各种关系型数据库(默认的 SQLite,可选 MySQL 、PostgreSQL 、Oracle 等等)
    • 强大的 ORM ( Object Relation Mapping,对象关系映射)模块,使得用 Python 操作数据库非常轻松,免去了使用 SQL 的麻烦
    • 优秀的数据库迁移机制( Migration ),修改数据模式( Schema )比较方便,能够适应不断变化的功能需求

    理解ORM

    简单来说,ORM 能够将面向对象的代码转换成相应的 SQL 语句,从而对数据库进行操作。SQL 是用于访问和处理数据库的标准的计算机语言,但是直接写在代码里面显然难以维护,而且对使用者的要求也非常高,写的糟糕的 SQL 代码查询效率非常低下。因此,使用设计良好的 ORM 不仅让代码可读性更好,也能帮助开发者进行查询优化,节省不少力气。

    优点:1、操作简单,使用python代码即可维护数据库
    缺点:ORM模式笨重,不支持非关系型数据库

    理解数据库迁移

    数据库迁移是指将用 Django 定义的模型转换成 SQL 代码(即迁移文件),并在数据库中进行建表操作(或更新表)。看下面这张图就知道了:

    在这里插入图片描述
    一般的开发流程就是这样:
    1、用 Django 定义了一个新的数据模型
    2、用 makemigrations 命令创建迁移文件(存储在子应用的 migrations 目录里面)
    3、用 migrate 命令执行迁移
    4、在开发中发现第 1 步中定义的模型不完善,更新数据模型
    5、跳转到第 2 步,反复循环

    实现第一个数据模型

    终于到了动手的环节。我们首先定义数据模型 Post ,包括标题 title 字段和 content 字段,代码如下:

    from django.db import models
    
    class Post(models.Model):
        title = models.CharField(max_length=200)
        content = models.TextField()
    
        def __str__(self):
            return self.title
    

    随后就是创建迁移文件并完成迁移(makemigrations&&migrate)。

    配置后台管理接口

    还需要在admin.py中完成application的注册。

    from django.contrib import admin
    from .models import Post
    admin.site.register(Post)
    

    这是一篇博客介绍,从这里主要学习Django流程上的开发思路,可以看出主要是model.pyviews.py部分比较复杂一些。

    URL调度过程实例

    代码示例

    #1. mysite.urls.py

    from django.conf.urls import patterns, include, url
     
    urlpatterns = patterns('',
         url(r"^$","mysite.views.index"),
         url(r"^about/","mysite.views.about"),
         url(r"^people/",include(people.urls)),
         url(r"^contact/","mysite.views.contact"),
         url(r"^update/","mysite.views.update"),
    )
    

    #2.people.urls.py

    from django.conf.urls import patterns, include, url
     
    urlpatterns = patterns('',
         url(r"^daoluan/","people.views.daoluan"),
         url(r"^sam/","people.views.sam"),
         url(r"^jenny/","people.views.jenny"),
    )
    

    #3.people.views.py

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

    当我们访问http://example.com/people/daoluan/的时候URL dispatcher的调度过程(蓝色部分):
    在这里插入图片描述

    1.BaseHandler.get_response()中根据settings.py中的ROOT_URLConf设置选项构造RegexURLResolver对象,并且调用RegexURLResolver.resolve("/people/daoluan/")启动解析,其中RegexURLResolver.regex="^\",也就是说它会过滤"",url变为"people/daoluan/";
    2.resolve()函数中调用RegexURLResolver.url_patterns(),加载了所有的匹配信息如下(与图中一样):

    • (类型)RegexURLPattern(正则表达式) [^$]
    • RegexURLPattern [^about/]
    • RegexURLResolver [^people/]
    • RegexURLPattern [^contact/]
    • RegexURLPattern [^update/]

    语句 for pattern in self.url_patterns: 开始依次匹配. 第一个因为是 RegexURLPattern 对象, 调用 resolve()RegexURLPattern.resolve(): 它直接用 [\^$] 去匹配 “people/daoluan/”, 结果当然是不匹配.
    3. 下一个pattern过程同上
    4. 第三个 pattern 因为是 RegexURLResolver 对象, 所以 resolve() 调用的是 RegexURLResolver.resolve(), 而非上面两个例子中的 RegexURLPattern.resolve(). 因为第三个 pattern.regex = "^people/", 所以会将 "people/daoluan/" 过滤为 "daoluan/". pattern.resolve() 中会调用 RegexURLResolver.url_patterns(), 加载了所有的匹配信息如下(和图中一样):

    • RegexURLPattern [^daoluan$]
    • RegexURLPattern [^sam$]
    • RegexURLPattern [^jenny$]

    语句 for pattern in self.url_patterns: 开始依次匹配. 第一个就中, 过程和刚开始的过程一样. 因此构造 ResolverMatch 对象返回. 于是 BaseHandler.get_response() 就顺利得到 ResolverMatch 对象, 其中记录了有用的信息. 在 BaseHandler.get_response() 中有足够的信息让你知道开发人员在 views.py 中定义的函数是 def daoluan(request): 在什么时候调用的:

    
    # BaseHandler.get_response() 的定义
    # 处理请求的函数, 并返回 response
    def get_response(self, request):
        ......
     
        # 实例化 RegexURLResolver, 暂且将其理解为一个 url 的匹配处理器, 下节展开
        resolver = urlresolvers.RegexURLResolver(r'^/', urlconf)
        ......
     
        # 调用 RegexURLResolver.resolve(), 可以理解为启动匹配的函数; 返回 ResolverMatch 实例
        resolver_match = resolver.resolve(request.path_info)
        ......
     
        # resolver_match 对象中存储了有用的信息, 譬如 callback 就是我们在 views.py 中定义的函数.
        callback, callback_args, callback_kwargs = resolver_match
        ......
     
        # 这里调用的是真正的处理函数, 我们一般在 view.py 中定义这些函数
        response = callback(request, *callback_args, **callback_kwargs)
        ......
     
        return response
    

    总结:url 调度器主要 RegexURLResolver, RegexURLPattern, ResolverMatch 和三个辅助函数 url(), include(), patterns() 完成. 可以发现, url 的调度顺序是根据 urls.py 中的声明顺序决定的, 意即遍历一张表而已, 有没有办法提高查找的效率?(https://www.cnblogs.com/daoluanxiaozi/p/3323352.html、http://www.nowamagic.net/academy/detail/13281030#)

    再就是Template(模板),Django中的模板不支持直接写Python代码,只支持写template filter、template flag等。可以使用jinja2进行扩展。

    问题
    1.project下面有一个urls.py,每个application下面也有一个urls.py,这里衍生出一个问题,两个urls.py有什么作用?分别是做什么的?
    参见:https://stackoverflow.com/questions/58554737/what-are-the-differences-between-urls-py-in-projects-folder-and-app-folder-in-d

    简单来说就是:project下的urls.py是"基础"路由,例如访问0.0.0.0/blog/1.html时,会先把请求交给blog application的路由,再根据1.html在blog application的urls.py下找打特定的请求地址。

    # project's urls.py
    
    from django.contrib import admin
    from django.urls import include, path
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('myapp/', include("myapp.urls")) # requests on a route starting with "myapp/" will be forwarded to "myapp.urls"
    ]
    
    # myapp's urls.py
    from django.urls import path
    from . import views
    
    app_name = "myapp"
    
    urlpatterns = [
        path("", views.index, name="index"),
        path("contact/", views.contact, name="contact")
    ]
    


    例如,如果我请求“localhost:8000/myapp/contact”,您的project的urls.py将检测到它必须将该请求转发到您的application–>myapp,而应用程序myapp将调用它的view .contact

    开始第一个Demo

    使用下面的命令创建一个名为mysite的项目

    django-admin startproject mysite
    

    可以看到以下形式的目录结构:

    在这里插入图片描述

    这里的manage.py是一个用于与项目交互的命令行实用程序。它是对django-admin.py工具的简单封装。不需要对这个文件进行任何的修改。

    • mysite/:
      • _init_.py:一个空文件,用来让Python知道把mysite目录作为Python的一个module。
      • asgi.py:这是作为ASGI运行项目的配置,ASGI是用于异步web服务器和应用程序的新兴标准。
      • settings.py:包含了初始默认的项目设置和配置
      • urls.py:这是URL patterns所在的位置。这里定义的每一个URL都映射到一个view
      • wsgi.py:这是作为Web Server Gateway interface(WSGI)应用程序运行项目的配置。

    生成的settings.py文件包含项目设置,包括一个使用SQLite3数据库的基本配置和一个名为INSTALLED_APPS的列表,其中包含默认添加到项目中的常见Django应用程序。我们将在稍后的Project settings 部分介绍这些应用程序。

    展开全文
  • DjangoPracticeProject:《跟老齐学Python:Django实战》对于初学者来说,也许官方文档太简要了,因此本书的作用就是将初学者领入Django开发的大门,并引导读者熟悉使用Django官方文档。本书从始至终贯穿着一个项目...
  • 项目实战 Python Django 个人网站 电影推荐网站 完整代码 完整版Python-Django项目,调试通过,直接下载即可运行包括:登陆、注册、浏览、搜索、发布资源、评论等多个功能。可作为新手练习,课程设计,毕业设计,...
  • 包含静态文件,数据库文件
  • 完整版Python-Django项目,调试通过,直接下载即可运行包括:登陆、注册、浏览、搜索、发布资源、评论等多个功能。可作为新手练习,课程设计,毕业设计,代码注释详细,便于理解。
  • 原博文2020-04-14 16:28 −Django完整项目源码分享链接:https://pan.baidu.com/s/1GlnJtcjW0qMEb5-VswEZ4w 提取码:odfg这是整理收集的完整的Django项目源码,在学习探索上可以起到很大的作用,我也是根据这个在...

    原博文

    2020-04-14 16:28 −

    Django完整项目源码分享

    链接:https://pan.baidu.com/s/1GlnJtcjW0qMEb5-VswEZ4w 提取码:odfg

    这是整理收集的完整的Django项目源码,在学习探索上可以起到很大的作用,我也是根据这个在慢慢学习Django框架。

    这是一个完整的电商项目源码,其中...

    相关推荐

    2019-12-03 16:07 −

    # django ## 概述 python有许多不同的WEB框架,django是最具有代表性的一位,许多成功的网站和APP都基于django django是一个开源的web应用框架,由python编写 django采用了MVC的软件设计模式,既模型M,视图V,和控制器C ### MVC框架和MTV框...

    2019-12-03 16:06 −

    # 前戏 我们在前面的课程中已经学会了给视图函数加装饰器来判断是用户是否登录,把没有登录的用户请求跳转到登录页面。我们通过给几个特定视图函数加装饰器实现了这个需求。但是以后添加的视图函数可能也需要加上装饰器,这样是不是稍微有点繁琐。 学完今天的内容之后呢,我们就可以用更适宜的方式来实现类似给所有请求...

    2019-12-03 16:11 −

    # Cookie ### Cookie的由来 Http协议是无状态的 无状态的意思是每次都是独立的请求存在,它的执行情况和结果与前面的请求和后面的请求都无直接关系,它不会受到前面的请求响应情况直接影响,也不会直接影响后面的请求响应情况。 一句话来说,人生若只如初见,对服务器来说,每一次的请求都是全新...

    2019-12-11 15:50 −

    虚拟环境安装项目中需要安装许多插件,为不影响系统的环境,可以为项目新建一个虚拟环境,所有的早教课程安装包在该虚拟环境中独有,以防影响其他项目。1. 安装虚拟环境:pip install virtualenv(注意:virtualenv默认安装在当前目录下,故将virtualenv的安装目录添加至环境...

    2019-12-19 09:33 −

    ### Django使用Redis进行缓存详细最全流程 https://blog.csdn.net/sinat_29699167/article/details/79699200 ### Django之view视图处理(FBV,CBV,装饰器,前后端交互各种数据类型和响应,请求头相关信息) htt...

    2019-12-18 22:21 −

    一、外键跨表操作(一对多)

    在 [Python自学] day-19 (2) (Django-ORM) 中,我们利用外键实现了一对多的表操作。

    可以利用以下方式来获取外键指向表的数据:

    def orm_test(request): # 向UserGroup表中插入一个grou...

    comment.png

    0

    attention.png

    116

    2019-12-24 22:14 −

    第一天笔记:链接

    第二天笔记:链接

    第三天笔记:链接...

    2019-12-02 23:00 −

    1. 创建Django REST framework工程

    1.1手动创建工程文件夹

    1.2进去工程文件夹内,执行命令:django-admin startproject web_project创建工程目录

    1.3修改,添加目录结构

    apps 存放Django的应用

    libs 存放第三方的库文件

    s...

    comment.png

    0

    attention.png

    1155

    2019-12-17 15:03 −

    一、获取表单提交的数据

    在 [Python自学] day-18 (2) (MTV架构、Django框架) 中,我们使用过以下方式来获取表单数据:

    user = request.POST.get('username', None)

    这种获取方式可以获取来自表单的单个数据,例如&...

    2019-12-17 21:15 −

    一、ORM的分类

    ORM一般分为两类:

    1.DB first:先在DB中创建数据库、表结构,然后自动生成代码中的类。在后续操作中直接在代码中操作相应的类即可。

    2.Code first:直接在代码中实现各种类,然后执行,代码自动在DB中创建对应的数据库和表结构。

    最常用的是后者,即Code Firs...

    comment.png

    0

    attention.png

    115

    展开全文
  • 二、搭建Django项目 1.File—>New Project 2.新窗口打开,会出现以下的文件 简单解释一下这几个文件:  **init.py:**这是一个初始化的空文件,一般我们不需要动它。  settings.py: 这是一个配置文件,里面有...
  • 本系列课程为练手项目实战:学生管理系统v4.0的开发,项目包含了如下几个内容:项目的总体介绍、基本功能的演示、Vuejs的初始化、Element UI的使用、在Django中实现针对数据的增删改查的接口、在Vuejs中实现前端增删...
  • 完整版Python-Django项目,调试通过,直接下载即可运行包括:登陆、注册、浏览、搜索、发布资源、评论等多个功能。可作为新手练习,课程设计,毕业设计,代码注释详细,便于理解。
  • Django项目实战之订餐系统第一章:项目框架创建 一、准备工作及项目环境 1、安装python环境,我的python版本为3.9 2、安装django,我的django版本为3.1.5 3、安装编程软件:推荐使用vscode这款编程软件进行开发 二、...
  • 项目实战: CMDB自动化资产扫描 目录 项目实战: CMDB自动化资产扫描 Django项目搭建 django项目创建cmdb 配置项目数据库为mysql Django工程多配置文件 资产管理 主机存活探测模块和工具——Nmap探测工具 ...
  • 七天实战入门Django Web开发-州的先生
  • 学习python后端开发的基础项目,完整的博客系统源码
  • 吃了么外卖网 Jango +MYSQL+ Redis+ Virtualeny 近年来,外卖行业随着电子设备、网络的普及,也因其便捷的特点,...本章将使用 Python语言、Django框架开发一个外卖网站,并详细介绍开发时需要了解和掌握的相关开发细节。
  • Django项目之Web端电商网站的实战开发(一)

    万次阅读 多人点赞 2019-03-25 21:31:08
    一丶项目介绍 二丶电商项目开发流程 三丶项目需求 四丶项目架构概览 五丶项目数据库设计 六丶项目框架搭建 一丶项目介绍 产品:关于Web端的电商网站 商业模式:B2C模式企业对个人 设计模式:使用前后端不...
  • PythonDjango开发实战-源码,
  • 图解FastDFS上传下载文件流程 上传文件 下载文件 通过docker运行FastDFS并访问上传的文件 Linux安装docker docker资源包 docker安装包已放在资源内 # cd进入源码目录 cd docker # sudo apt-key add gpg # 安装3个...
  • 文章的开头,先说下 Django 框架Django 是一个开放源代码的 Web 应用框架,使用 Python 语言编写完成。由于 Python 语言是跨平台的,所以,不论是 Windows、Linux 还是 Mac OS X 都可以开发 Django 应用。Web 框架是...
  • 众所周知,Django框架是目前Python编程语言的主流Web框架,为什么这么说呢?...今天我将向大家推荐一个免费学习Python框架Django项目实战教程,下面是教程详细内容的介绍。Django框架有哪些优...
  • Python+Django+vue3全栈开发商城项目,包含用户、订单、购物车、商品等模块,后端代码均有注释,是学习python项目开发良好案例
  • python manage.py rebuild_index 搜索引擎返回数据、具体使用 注意这个MySearchView类没有继承View而是继承的SearchView没有as_view()方法 查看源代码SearchView有__call__方法 直接调用对象就可以 数据格式 data_...
  • 这是一个web实战项目(附带软件+代码+文档+视频讲解),Django框架撰写。 包括软件和安装说明、演示视频、源代码

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,342
精华内容 2,136
关键字:

django项目实战源码