django Tips

Posted relaxlee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django Tips相关的知识,希望对你有一定的参考价值。

django Tips

  • 处理流程:

    浏览器请求-->django-->url分发(urls.py)-->views视图处理逻辑(views.py)-->render(django模板渲染)-->返回浏览器解析

    变量{{ var }}, 过滤器{{ var|length }}, 标签{% for name in dict%} 只是django的模板渲染,是django模板的语法,浏览器并不认识,django渲染(render,解析成浏览器能够识别的html格式)后再返回(return)浏览器解析--> return render(request, ‘home.html‘)

  • APPEND_SLASH 参数自动给网址结尾加‘/‘, django默认
    APPEND_SLASH = False  # 网址结尾不加/
    
  • 浏览器发起get请求方式:

    • 浏览器url地址栏
    • a标签
    • form表单
    • ajax
  • 浏览器发起post请求方式:

    • form表单
    • ajax

    浏览器地址栏url发请求 等于 a标签href发请求

    html

      {% for book in book_lst %}
         <tr>
            <td>{{ forloop.counter }}</td>
            <td>{{ book.title }}</td>
            <td>{{ book.price }}</td>
            <td>{{ book.pub_date|date:‘Y-m-d‘ }}</td>
            <td>{{ book.publish }}</td>
            
            <td>
    		<a href="" class="btn btn-warning">编辑</a>
            {# a 标签发请求 相当于 地址栏发请求 #} }
            <a href="/books/delete/{{ book.nid }}" class="btn btn-danger">删除</a>
            </td>
    
        </tr>
            {% endfor %}
            </tbody>
    

    urls.py

    url(r‘^books/delete/(d+)/‘, views.dele_book, name=‘new_book‘)  # 传入需要删除的键值,并重定向到查询页,并且根据name 反向解析url,防止url地址更改
    

    views.py

    from django.urls import reverse
    
    def dele_book(request, book_nid):
        book.objects.filter(nid=book_nid).delete()
        url = reverse(‘new_book‘)
        return redirect(url)
    
  • 外部环境使用django的models或者外部环境调用django的设置,需要配置django环境

    # xxx.py
    
    import os
    
    if __name__ == ‘__main__‘:
        # django manage.py中的源码
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "orm_relation.settings") # django环境,
        	
        from app01.models import Book
        
        obj_list = []
        for i in range(1, 10):
            obj = Book(
                title=f‘python{i}‘,
                price=120 + i * 10
                publish = ‘上海出版社‘ if i < 5 else ‘北京出版社‘,
            )
        	obj_list.append(obj)
        Book.objects.bulk_create(obj_list) # 批量添加记录
    
    
    
  • mysql 时间差异, UTC时间, 中国处在东8区,本地要+8小时

    django.settings:

    TIME_ZONE = ‘Asia/Shanghai‘
    USE_TZ = False
    

    临时方案:

    mysql> SET time_zone = ‘+8:00‘;
    

    永久解决方案:

    配置windows:my.ini linux: /etc/my.cnf

    [mysqld]
    default-time_zone = ‘+8:00‘
    
    service mysql restart #重启服务,linux
    
  • 取主键值:对象.pk,不管对象内部主键的名字是什么,pk总能取到主键值

    obj = Human.objects.get(name=‘sunny‘)
    print(obj.pk)
    

    django目录结构

    apps: app应用同一放在apps目录下(package)
    extra_apps: 存放第三方源码
    media: 用户上传的目录
    static: 静态文件目录
        css
        js
        img
        ...
    templates: 模板html文件
    requirement.txt: 项目依赖的第三方包罗列在此文件, pycharm会检测到依赖包是否安装
    
    
  • 静态文件,url都用别名,以便修改,防止攻击

    静态文件设置:

    settings.py

    STATIC_URL = ‘/static/‘
    STATICFILES_DIRS=[
        os.path.join(BASE_DIR, ‘static‘),
    ]
    
    

    html调用:

    {% load static %}
    
    <script src="{%static ‘js/jquery.js‘ %}"></script>
    

    url别名设置:

    urls.py

    urlpatterns = [
        path(‘login/‘, views.LoginView.as_view(), name=‘login‘),
    ]
    

    html调用:

    <form action="{% url ‘login‘ %}" method="post">
    

以上是关于django Tips的主要内容,如果未能解决你的问题,请参考以下文章

django Tips

如何在 Django Summernote 中显示编程片段的代码块?

django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段

django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段

python的一些tips

Django REST框架--认证和权限