IRedis开发记3:编译正则的难题

来源:kawabangga   |   更新时间: 1月前   |   分类: 程序开发笔记


这篇文章是 IRedis 的第三篇开发笔记。一直以来,IRedis 的补全都是基于 prompt_toolkit 的 regular_language 来实现的(一个例子)。我需要用正则表达式来验证用户输入的 Redis 命令是否合法,从中抓出来 token,然后对这些 token 进行自动补全。随着开发,支持的 Redis 的命令越来越多,这个正则表达式已经膨胀到 200+ 行了,编译速度也令人难以忍受。

查看原文

2019年小结

来源:dongwm   |   更新时间: 1月前   |   分类: 


早就想写一篇年终总结,就像豆瓣书影音报告那样复盘一下我这一年。不过每年年底却是我最忙的一段时间,一直拖到现在。

时间过得好快,一转眼小朋友已经上幼儿园大班了。看着小朋友一天天长大,不可以避免的感觉到自己越来越「成熟」,更现实了,看清了很多事情,焦虑的地方多了。

自从有了女儿,对很多东西的看法都发生了改变。

我本身是一个比较宅的人,喜欢安静,哪怕什么都不干摊在沙发我都觉得挺好的。但是小朋友正好相反,除了被她的想象力和好奇心折服之外,最羡慕的就是她的精力。我虽然宅但是希望她非常活泼,性格开朗,所以尽量不要宅在家,在周末或者假期参与各种活动。

查看原文

继续优化博客Vue+Webpack生成的Javascript文件体积

来源:dongwm   |   更新时间: 1月前   |   分类: 


昨天lyanna刚发布了 v3.2,这里面只有一个更新,就是极大的降低了后台和动态这种使用 Vue+webpack 生成的 Javascript 文件的体积。其实代码改动不大,但是效果很明显,本文就是分享这件事。

在之前的版本里面 Javascript 文件大小如下:

❯ du -sh static/js/activity/*.js
208K    static/js/activity/app.js
1.9M    static/js/activity/chunk-vendors.js

❯ du -sh static/js/admin/*.js
824K    static/js/admin/app.js
8.0K    static/js/admin/chunk-2d230fe7.js
4.0K    static/js/admin/chunk-2d2382a4.js
28K static/js/admin/chunk-46e421b1.js
1.9M    static/js/admin/chunk-vendors.js
查看原文

Python 壹周刊 007

来源:prodesire   |   更新时间: 1月前   |   分类: Python


Python 2 已退休

老爹 Guido van Rossum 退出 Python 指导委员会

Python 类型注解

本文将全面介绍 mypy,通过许多示例演示了这种类型检查器的语法和功能。

Flask8 规则

Flake8 中的所有规则的说明和示例。

在 Python 中使用 Rust 变得简单

对于需要性能提升的计算密集型任务,可以由 Rust 来实现逻辑,然后在 Python 中调用。本文将介绍如何实现这个过程。

查看原文

从Python2迁移到Python3实战(二) - 类型提示(mypy、monkeytype和pyannotate)

来源:dongwm   |   更新时间: 1月前   |   分类: 


如果把时间拉到一年前我肯定不会写关于类型提示 (Type Hint) 或者 mypy 的内容。印象里在之前的博客或者知乎回答中明确提过「拒绝在代码中指定变量类型」,另外一个原因是 mypy 和类型提示相关的功能还在不断完善,业界还没有大范围应用。

众所周知,Python 是动态类型语言,声明变量时不需要显式的指定变量类型,程序会在运行时候解析出变量的类型,这样能够减少一部分代码量,加快程序的编写速度。不过缺点大家也清楚,除了降低可读性之外,相对于其他编程语言 Python 一直被诟病:慢。

查看原文

Django入门与实践-第5章:模型设计

来源:foofish   |   更新时间: 1月前   |   分类: django教程


模型

这些模型基本上代表了应用程序的数据库设计。我们在本节中要做的是创建 Django 所表示的类,这些类就是在上一节中建模的类:Board,Topic和Post。User 模型被命名为内置应用叫auth,它以命名空间 django.contrib.auth 的形式出现在INSTALLED_APPS配置中。

我们要做的工作都在 boards/models.py 文件中。以下是我们在Django应用程序中如何表示类图的代码:

查看原文

Django入门与实践-第1章:环境搭建

来源:foofish   |   更新时间: 1月前   |   分类: django教程


前言

今天我将开始一个关于 Django 基础知识的全新系列教程。这是一个开始学习 Django 的完整入门指南。教程材料一共会被分为七个部分(译注:被我们拆分为27个小章节)。我们将从安装,开发环境的准备、模型、视图、模板、URL到更高级的主题(如迁移、测试和部署)中详细探讨所有基本概念。

我想做一些不一样的事情。一个容易学习,内容丰富且不失趣味的教程。我的想法是在文章中穿插一些漫画的方式来演示说明相应的概念和场景。我希望大家能够享受这种阅读!

查看原文

Django入门与实践-第13章:表单处理

来源:foofish   |   更新时间: 1月前   |   分类: django教程


Forms(表单) 用来处理我们的输入。这在任何 web 应用或者网站中都是很常见的任务。标准的做法是通过 HTML 表单实现,用户输入一些数据,将其提交给服务器,然后服务器处理它。

{% raw %} 表单处理是一项非常复杂的任务,因为它涉及到与应用多个层面的交互。有很多需要关心的问题。例如,提交给服务器的所有数据都是字符串的形式,所以在我们使用它之前需要将其转换为需要的数据类型(整形,浮点型,日期等)。我们必须验证有关应用程序业务逻辑的数据。我们还需要妥善地清理和审查数据,以避免一些诸如 SQL 注入和 XSS 攻击等安全问题。

查看原文

Django入门与实践-第0章:前言

来源:foofish   |   更新时间: 1月前   |   分类: django教程


Django 入门与实践教程是由咱公众号「Python之禅」 发起的A Complete Beginner's Guide to Django翻译计划,这是一个浅显易懂的 Django 入门教程。

如果你看了 Django 官方文档还是不知道如何做一个项目,那么这个教程将指引你从 0 到 1 完成一个贴近生产环境的真实项目,适合新手作为练手项目来学习。同时,它也是我们知识星球中实战项目的参考教程,中文翻译由咱们的球友协同完成。

查看原文

Django入门与实践-第11章:URL 分发

来源:foofish   |   更新时间: 1月前   |   分类: django教程


前言

在本节课中,我们将深入理解两个基本概念: URLs 和 Forms。在这个过程中,我们还将学习其它很多概念,如创建可重用模板和安装第三方库。同时我们还将编写大量单元测试。

如果你是从这个系列教程的 part 1 跟着这个教程一步步地编写项目,你可能需要在开始之前更新models.py:

boards/models.py

classTopic(models.Model):# other fields...# Add `auto_now_add=True` to the `last_updated` fieldlast_updated=models.DateTimeField(auto_now_add=True)classPost(models.Model):# other fields...# Add `null=True` to the `updated_by` fieldupdated_by=models.ForeignKey(User,null=True,related_name='+')

class Topic(models.Model):
    # other fields...
    # Add `auto_now_add=True` to the `last_updated` field
    last_updated = models.DateTimeField(auto_now_add=True)

class Post(models.Model):
    # other fields...
    # Add `null=True` to the `updated_by` field
    updated_by = models.ForeignKey(User, null=True, related_name='+')
查看原文

Django入门与实践-第17章:保护视图

来源:foofish   |   更新时间: 1月前   |   分类: django教程


前言

欢迎来到本系列教程的第5部分,在这节课,我们将学习如何保护视图防止未登录的用户访问,以及在视图和表单中访问已经登录的用户,我们还将实现主题列表和回复列表视图,最后,将探索 Django ORM 的一些特性和数据迁移的简单介绍。

保护视图

我们必须保护视图防止那些未认证(登录)的用户访问,下面是发起一个新话题的页面

在上图中,用户还没有登录,尽管他们可以看到页面和表单。Django 有一个内置的视图装饰器来避免它被未登录的用户访问:

查看原文

Django入门与实践-第14章:用户注册

来源:foofish   |   更新时间: 1月前   |   分类: django教程


前言

这一章节将会全面介绍 Django 的身份认证系统,我们将实现注册、登录、注销、密码重置和密码修改的整套流程。

同时你还会了解到如何保护某些试图以防未授权的用户访问,以及如何访问已登录用户的个人信息。

在接下来的部分,你会看到一些和身份验证有关线框图,将在本教程中实现。之后是一个全新Django 应用的初始化设置。至今为止我们一直在一个名叫 boards 的应用中开发。不过,所有身份认证相关的内容都将在另一个应用中,这样能更良好的组织代码。

查看原文

Django入门与实践-第18章:访问已登录用户

来源:foofish   |   更新时间: 1月前   |   分类: django教程


现在我么可以改进new_topic视图,将发布主题的用户设置当前登录的用户,取代之前直接从数据库查询出来的第一个用户,之前这份代码是临时的,因为那时候还没有方法去获取登录用户,但是现在可以了:

boards/views.py(完整代码)

fromdjango.contrib.auth.decoratorsimportlogin_requiredfromdjango.shortcutsimportget_object_or_404,redirect,renderfrom.formsimportNewTopicFormfrom.modelsimportBoard,Post@login_requireddefnew_topic(request,pk):board=get_object_or_404(Board,pk=pk)ifrequest.method=='POST':form=NewTopicForm(request.POST)ifform.is_valid():topic=form.save(commit=False)topic.board=boardtopic.starter=request.user# <- heretopic.save()Post.objects.create(message=form.cleaned_data.get('message'),topic=topic,created_by=request.user# <- and here)returnredirect('board_topics',pk=board.pk)# TODO: redirect to the created topic pageelse:form=NewTopicForm()returnrender(request,'new_topic.html',{'board':board,'form':form})

from django.contrib.auth.decorators import login_required
from django.shortcuts import get_object_or_404, redirect, render

from .forms import NewTopicForm
from .models import Board, Post

@login_required
def new_topic(request, pk):
    board = get_object_or_404(Board, pk=pk)
    if request.method == 'POST':
        form = NewTopicForm(request.POST)
        if form.is_valid():
            topic = form.save(commit=False)
            topic.board = board
            topic.starter = request.user  # <- here
            topic.save()
            Post.objects.create(
                message=form.cleaned_data.get('message'),
                topic=topic,
                created_by=request.user  # <- and here
            )
            return redirect('board_topics', pk=board.pk)  # TODO: redirect to the created topic page
    else:
        form = NewTopicForm()
    return render(request, 'new_topic.html', {'board': board, 'form': form})
查看原文

Django入门与实践-第3章:Hello World

来源:foofish   |   更新时间: 1月前   |   分类: django教程


现在来写我们的第一个视图(view)。我们将在下一篇教程中详细探讨它。但现在,让我们试试看看如何用Django创建一个新页面。

打开boards应用程序中的views.py文件,并添加以下代码:

views.py

fromdjango.httpimportHttpResponsedefhome(request):returnHttpResponse('Hello, World!')

from django.http import HttpResponse

def home(request):
    return HttpResponse('Hello, World!')
查看原文

Django入门与实践-第16章:用户登录

来源:foofish   |   更新时间: 1月前   |   分类: django教程


首先,添加一个新的URL路径:

myproject/urls.py

fromdjango.conf.urlsimporturlfromdjango.contribimportadminfromdjango.contrib.authimportviewsasauth_viewsfromaccountsimportviewsasaccounts_viewsfromboardsimportviewsurlpatterns=[url(r'^$',views.home,name='home'),url(r'^signup/$',accounts_views.signup,name='signup'),url(r'^login/$',auth_views.LoginView.as_view(template_name='login.html'),name='login'),url(r'^logout/$',auth_views.LogoutView.as_view(),name='logout'),url(r'^boards/(?P\d+)/$',views.board_topics,name='board_topics'),url(r'^boards/(?P\d+)/new/$',views.new_topic,name='new_topic'),url(r'^admin/',admin.site.urls),]

from django.conf.urls import url
from django.contrib import admin
from django.contrib.auth import views as auth_views

from accounts import views as accounts_views
from boards import views

urlpatterns = [
    url(r'^$', views.home, name='home'),
    url(r'^signup/$', accounts_views.signup, name='signup'),
    url(r'^login/$', auth_views.LoginView.as_view(template_name='login.html'), name='login'),
    url(r'^logout/$', auth_views.LogoutView.as_view(), name='logout'),
    url(r'^boards/(?P<pk>\d+)/$', views.board_topics, name='board_topics'),
    url(r'^boards/(?P<pk>\d+)/new/$', views.new_topic, name='new_topic'),
    url(r'^admin/', admin.site.urls),
]
查看原文

Django入门与实践-第12章:复用模板

来源:foofish   |   更新时间: 1月前   |   分类: django教程


到目前为止,我们一直在复制和粘贴 HTML 文档的多个部分。从长远来看是不可行的。这也是一个坏的做法。

在这一节我们将重写 HTML 模板,创建一个master page(母版页),其他模板添加它所独特的部分。

在templates文件夹中创建一个名为base.html的文件:

templates/base.html

{% load static %}{% block title %}Django Boards{% endblock %}{% block breadcrumb %} {% endblock %}{% block content %} {% endblock %}

{% load static %}<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>{% block title %}Django Boards{% endblock %}</title>
    <link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
  </head>
  <body>
    <div class="container">
      <ol class="breadcrumb my-4">
        {% block breadcrumb %}
        {% endblock %}
      </ol>
      {% block content %}
      {% endblock %}
    </div>
  </body>
</html>
查看原文

Django入门与实践-第10章:Django Admin 介绍

来源:foofish   |   更新时间: 1月前   |   分类: django教程


到目前为止,我们使用交互式控制台(python manage.py shell)添加新的版块。但我们需要一个更好的方式来实现。在这一节中,我们将为网站管理员实现一个管理界面来管理这些数据。

Django Admin 简介

当我们开始一个新项目时,Django已经配置了Django Admin,这个应用程序列出的INSTALLED_APPS。

查看原文

Django入门与实践-第2章:创建项目

来源:foofish   |   更新时间: 1月前   |   分类: django教程


启动一个新项目

执行下面的命令来创建一个新的 Django 项目:

django-admin startproject myproject

django-admin startproject myproject

命令行工具django-admin会在安装Django的时候一起自动安装好。

执行了上面的命令以后,系统会为Django项目生成基础文件夹结构。

查看原文

Django入门与实践-第8章:第一个测试用例

来源:foofish   |   更新时间: 1月前   |   分类: django教程


测试主页

测试将是一个反复出现的主题,我们将在整个教程系列中一起探讨不同的概念和策略。

我们来开始写第一个测试。现在,我们将在boards应用程序内的tests.py文件中操作

boards/tests.py

fromdjango.core.urlresolversimportreversefromdjango.testimportTestCaseclassHomeTests(TestCase):deftest_home_view_status_code(self):url=reverse('home')response=self.client.get(url)self.assertEquals(response.status_code,200)

from django.core.urlresolvers import reverse
from django.test import TestCase

class HomeTests(TestCase):
    def test_home_view_status_code(self):
        url = reverse('home')
        response = self.client.get(url)
        self.assertEquals(response.status_code, 200)
查看原文

Django入门与实践-第4章:系统设计

来源:foofish   |   更新时间: 1月前   |   分类: django教程


前言

欢迎来到 Django 教程的第二节,在第一节中,我们安装了项目所需要的一切,希望你安装的是 Python3.6,并且在虚拟环境中运行 Django1.11,这节课我们继续在这个项目上编写代码。

咱们先讨论一些项目的背景知识,然后再学习 Django 的基础,包括:模型(models),管理后台(admin),视图(views),模板(templates),和路由(URLs)

查看原文

本页内容使用均遵循相关开源协议,部分内容获得作者本人授权