Pengfei-xue.GitHub.io

programming your life!

Home ~/

View My GitHub Profile

  • django note

    escape, unescape html entities

    HTML Escape

    try:
        from html import escape  # python 3.x
    except ImportError:
        from cgi import escape  # python 2.x
    
    print(escape("<"))
    

    HTML Unescape

    try:
        from html import unescape  # python 3.4+
    except ImportError:
        try:
            from html.parser import HTMLParser  # python 3.x (<3.4)
        except ImportError:
            from HTMLParser import HTMLParser  # python 2.x
        unescape = HTMLParser().unescape
    
    print(unescape("&gt;"))
    

    log all sql queries

    LOGGING = {
        'version': 1,
        'filters': {
            'require_debug_true': {
                '()': 'django.utils.log.RequireDebugTrue',
            }
        },
        'handlers': {
            'console': {
                'level': 'DEBUG',
                'filters': ['require_debug_true'],
                'class': 'logging.StreamHandler',
            }
        },
        'loggers': {
            'django.db.backends': {
                'level': 'DEBUG',
                'handlers': ['console'],
            }
        }
    }
    

    log all sql queries

    Your understanding is mostly correct. You use select_related when the object that you’re going to be selecting is a single object, so OneToOneField or a ForeignKey.

    You use prefetch_related when you’re going to get a “set” of things, so ManyToManyFields as you stated or reverse ForeignKeys. Just to clarify what I mean by “reverse ForeignKeys” here’s an example:

    class ModelA(models.Model):
        pass
    
    class ModelB(models.Model):
        a = ForeignKey(ModelA)
    
    ModelB.objects.select_related('a').all() # Forward ForeignKey relationship
    ModelA.objects.prefetch_related('modelb_set').all() # Reverse ForeignKey relationship
    

    What’s the difference between select_related and prefetch_related in Django ORM?

    How can I see the raw SQL queries Django is running?

    Make sure your Django DEBUG setting is set to True. Then, just do this:

    >>> from django.db import connection
    >>> connection.queries
    [{'sql': 'SELECT polls_polls.id, polls_polls.question, polls_polls.pub_date FROM polls_polls',
    'time': '0.002'}]
    

    connection.queries includes all SQL statements – INSERTs, UPDATES, SELECTs, etc. Each time your app hits the database, the query will be recorded.

    If you are using multiple databases, you can use the same interface on each member of the connections dictionary:

    >>> from django.db import connections
    >>> connections['my_db_alias'].queries
    

    If you need to clear the query list manually at any point in your functions, just call reset_queries(), like this:

    from django.db import reset_queries
    reset_queries()
    

    how to modify OneToOneField as inline for admin console?

    class NotifyPolicyInlines(admin.StackedInline):
        model = NotifyPolicy
    
    class ServiceAdmin(ModelAdmin):
        filter_horizontal = ('contacts', )
        inlines = [NotifyPolicyInlines, ]
    

    values/values_list 查询结果只返回特定字段

    Returns a QuerySet that returns dictionaries, rather than model instances, when used as an iterable.

    # This list contains a Blog object.
    >>> Blog.objects.filter(name__startswith='Beatles')
    <QuerySet [<Blog: Beatles Blog>]>
    
    # This list contains a dictionary.
    >>> Blog.objects.filter(name__startswith='Beatles').values()
    <QuerySet [{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}]>
    
    >>> Entry.objects.values_list('id').order_by('id')
    [(1,), (2,), (3,), ...]
    
    >>> Entry.objects.values_list('id', flat=True).order_by('id')
    [1, 2, 3, ...]
    
  • bash note

    echo color text in terminal

    You can use these ANSI escape codes:
    
    Black        0;30     Dark Gray     1;30
    Red          0;31     Light Red     1;31
    Green        0;32     Light Green   1;32
    Brown/Orange 0;33     Yellow        1;33
    Blue         0;34     Light Blue    1;34
    Purple       0;35     Light Purple  1;35
    Cyan         0;36     Light Cyan    1;36
    Light Gray   0;37     White         1;37
    And then use them like this in your script:
    
    #    .---------- constant part!
    #    vvvv vvvv-- the code from above
    RED='\033[0;31m'
    NC='\033[0m' # No Color
    printf "I ${RED}love${NC} Stack Overflow\n"
    which prints love in red.
    
    From @james-lim's comment, if you are using the echo command, be sure to use the -e flag to allow backslash escapes.
    
    # Continued from above example
    echo -e "I ${RED}love${NC} Stack Overflow"
    (don't add "\n" when using echo unless you want to add additional empty line)
    

    How to change the output color of echo in Linux

    sort numerically

    sort -t '_' -k 2n
    
    -t '_' (sets the delimiter to the underscore character)
    -k 2n (sorts by the second column using numeric ordering)
    

    How to POST JSON data with Curl from Terminal/Commandline to Test Spring REST?

    curl -H "Content-Type: application/json" -X POST -d '{"username":"xyz","password":"xyz"}' http://localhost:3000/api/login
    

    How do I split a string on a delimiter in Bash?

    a="foo:bar"
    b=${a%:*}
    c=${a##*:}
    you will get:
    
    b = foo
    c = bar
    

    How do I split a string on a delimiter in Bash Manipulating Strings

    comparison

    Other Comparison Operators

    array

    Array variables arry loop

    function

    functions

    Automatic exit from bash shell script on error

    Use the set -e builtin:

    #!/bin/bash
    set -e
    

    Any subsequent commands which fail will cause the shell script to exit immediately Alternatively, you can pass -e on the command line:

    bash -e my_script.sh
    

    You can also disable this behavior with set +e.

    Automatic exit from bash shell script on error

    books

  • 架构即未来 - 提前确定应用发展的预留空间

    招聘是另外一个预留量可以发挥作用的领域。不掌握现在的预留空间和未来产品的增长预期,你怎么会知道招多少 不同技能的人。如果你知道应用服务器和数据库有充足的预留空间,但防火墙和负载均衡器遇到了的带宽瓶颈, 那么你可能需要添加网络工程师,而不是系统管理员。

    量化业务的增长。自然增长可以通过分析没有任何新业务活动时期的增长情况来确定。例如,如果六月的应用 流量增加了5%,但前一个月没有任何新的签约或面向客户的新功能发布来解释交易的增长,我们就可以使用这一 数额作为有机增长的速度。

    预留空间 = (理想使用率 x 最大容量)- 当前使用量 - sum(增长(t) - 优化项目的受益(t) for t in range(1,12))

    预留时间 = 预留空间 / sum(增长(t) - 优化项目的受益(t) for t in range(1,12))

    作为一般经验法则,我们希望理想使用率从50%开始,逐步调升。多变性,在确定最大容量时的失误和在增长预测 中的误差,是确定这个比例的主要考虑因素。如果管理人员或工程师能对系统有非常好的理解,并且能对不易变化 的原因做出合理的解释,那么可以调整百分比。确定最大容量的另一种做法是从最大使用容量中减去三倍的实际使用 标准差,然后利用该数字来规划最大容量。

  • 架构即未来 - 生产环境变更管理

    团队有的时候把变更定义为任何有可能打破服务,系统或应用的行动。这个经典定义的主要问题是,他没有 认识到对于任何一个希望进化和成长的系统,变更时必要的。

    识别变更

    要限制变更的影响,首先应该确保每一个变更都需要有以下的数据记录:

    . 变更的准确日期和时间 . 将要发生的变更系统 . 实际的变更 . 变更期待的结果 . 变更人员的联系方式

    当你处理危机的时候,引起危机的那位变更者在场的机会极小。因此,你确实需要一个工具可以很容易地收集 早期发现的信息。变更管理日志,无论存储在什么系统,都应该对“最近有什么变更”这个问题提供明确的答案。

    变更管理

    变更请求

    发生变更的系统很重要,因为我们希望在某个时间段内限制某个特定系统的变更数量。把系统想象成机场的跑道。 我们不想让两个变更在同一个系统中碰撞,因为如果出现问题,我们将无法立即知道问题是由哪个变更引起的。

  • 架构即未来 - 危机管理和升级

    危机是不好,但是如果能妥善处理可以给公司带来长期的利益。针对一个或者一系列的危机,如果公司能因此 而改变过程,文化,组织结构和构架,就能够从危机中受益。在这种情况下,危机就是催化剂。

    危机管理团队绝对需要懂技术的人,但未必是会议室里技术水平最高的那个人。这个人应该能够用他的技术基础来提出与 危机相关的问题并评估答案。问题管理经理不是问题的主要解决者,而需要再危机管理中有效地管理主要的问题 解决者所遵循的过程。

    一个好的作战室具备下述条件:

    • 大量的白板空间
    • 能连接生产系统和事实数据的电脑及显示器
    • 用来共享信息的投影仪
    • 与作战室外的团队通信的电话
    • 连接聊天室
    • 为几个人工作而准备的工位

    认真思考升级策略,在中大危机发生之前获得高管的支持。危机管理者的工作就是要根据这些升级策略,在 合适的时间请合适的人参与危机处理工作,无论升级后解决问题可能有多快。