首页 > 代码库 > Django知识点汇总

Django知识点汇总

  Python的WEB框架有Django、Tornado、Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等诸多功能。

  一、基本配置

  1、建项目

终端命令:django-admin startproject xxx(项目名称)

启动服务:python manage.py runserver (后还可以跟ip、端口参数)

  2、新建app01文件夹

python manage.py startapp xxx(文件夹名)

  3、配置文件

    a、数据库

DATABASES = {
    ‘default‘: {
    ‘ENGINE‘: ‘django.db.backends.mysql‘,
    ‘NAME‘:‘dbname‘,
    ‘USER‘: ‘root‘,
    ‘PASSWORD‘: ‘xxx‘,
    ‘HOST‘: ‘‘,
    ‘PORT‘: ‘‘,
    }
}

# 由于Django内部连接MySQL时使用的是MySQLdb模块,而python3中还无此模块,所以需要使用pymysql来代替
  
# 如下设置放置的与project同名的配置的 __init__.py文件中
  
import pymysql
pymysql.install_as_MySQLdb() 

    b、模板路径

TEMPLATE_DIRS = (
        os.path.join(BASE_DIR,‘templates‘),
    )

    c、静态文件

STATICFILES_DIRS = (
        os.path.join(BASE_DIR,‘static‘),
    )

    d、app01在 INSTALLED_APPS 注册

INSTALLED_APPS = [
    ‘django.contrib.admin‘,
    ‘django.contrib.auth‘,
    ‘django.contrib.contenttypes‘,
    ‘django.contrib.sessions‘,
    ‘django.contrib.messages‘,
    ‘django.contrib.staticfiles‘,
    ‘app01‘,
]

  二、路由系统

    a、单一路由

url(r‘^index$‘, views.index)

    b、基于正则路由

url(r‘^index/(\d*)‘, views.index),
url(r‘^manage/(?P<name>\w*)/(?P<id>\d*)‘, views.manage),

    c、路由分发(inclued)

url(r‘^app01/‘,include(‘app01.urls‘)),

    d、设置别名

url(r‘^home‘, views.home, name=‘h1‘),
url(r‘^index/(\d*)‘, views.index, name=‘h2‘),

  设置名称之后,可以在不同的地方调用,如:

  • 模板中使用生成URL     {% url ‘h2‘ 2012 %}
  • 函数中使用生成URL     reverse(‘h2‘, args=(2012,))      路径:django.urls.reverse
  • Model中使用获取URL  自定义get_absolute_url() 方法
技术分享
class NewType(models.Model):
    caption = models.CharField(max_length=16)


    def get_absolute_url(self):
        """
        为每个对象生成一个URL
        应用:在对象列表中生成查看详细的URL,使用此方法即可!!!
        :return:
        """
        # return ‘/%s/%s‘ % (self._meta.db_table, self.id)
        #
        from django.urls import reverse
        return reverse(NewType.Detail, kwargs={nid: self.id})
View Code

  获取请求匹配成功的URL信息:request.resolver_match

  三、视图   

  a、FBV (func-base-view)    基于函数的视图

技术分享
路由关系
url(r^login.html$,views.login,name=login)

视图函数
def login(request):
    return HttpResponse(登录成功!)
View Code

  b、CBV(class-base-view)   基于类的视图

路由关系
url(r^login.html$,views.Login.as_view(),name=login)

视图类
class Login(View):
    def get(self,request):
        return render(request,"login.html")
    def post(self,request):
        return redirect(/index.html)

  四、模版

  a、模版的执行

    模版的创建过程,对于模版,其实就是读取模版(其中嵌套着模版标签),然后将 Model 中获取的数据插入到模版中,最后将信息返回给用户。

  b、模板中也有自己的语言,该语言可以实现数据展示

    • {{ item }}
    • {% for item in item_list %}  <a>{{ item }}</a>  {% endfor %}
        forloop.counter
        forloop.first
        forloop.last 
    • {% if ordered_warranty %}  {% else %} {% endif %}
    • 母版 (可以被多个子版继承):{% block title %}{% endblock %}
      子版 (一个子版只能继承一个母版):{% extends "base.html" %}
                                                      {% block title %}{% endblock %}
    • 帮助方法:
      {{ item.event_start|date:"Y-m-d H:i:s"}}
      {{ bio|truncatewords:"30" }}
      {{ my_list|first|upper }}
      {{ name|lower }}
    • 组件 (都能随便使用):{% include ‘组件文件名‘ %}

  c、自定义函数(在前端函数的调用是不用加 () 的)

    simple_filter
    最多两个参数,方式: {{第一个参数|函数名称:"第二个参数"}}(冒号后面不能有空格)
    可以做条件判断
    simple_tag
    无限制: {% 函数名 参数 参数%} 

    1、在app中创建templatetags模块

    2、创建任意py 文件,如:self_defined.py

技术分享
from django import template

register=template.Library()

@register.filter
def my_upper(value,arg):
    return value.upper()+arg

@register.simple_tag
def my_add(value,a1,a2,a3):
    return (value+a1+a2+a3).lower()
View Code

    3、在使用自定义函数的html文件中导入之前创建的 self_defined.py 文件名

在html文件的首行导入self_defined文件
{% load self_defined %}

    4、前端html文件里的代码

<h1>filter</h1>
 {{ name|my_upper:"666" }}
 <hr>
 <h1>simple_tag</h1>
 {% my_add nick nb "+" nn%}

    5、在settings中配置当前app,不然django无法找到自定义的函数

技术分享
INSTALLED_APPS = [
    django.contrib.admin,
    django.contrib.auth,
    django.contrib.contenttypes,
    django.contrib.sessions,
    django.contrib.messages,
    django.contrib.staticfiles,
    app01,
]
View Code

    6、传入的参数及显示的效果

技术分享

技术分享

  五、Model

  a、基本结构

class 表名(View):
    自增ID可不用自己写
    列名=字段类型(参数)

  b、外建
    ForeignKey

  c、多对多
    ManyToMangyField 会自动创建第三张关系表
    手动写class自己定义第三张关系表

  8、在数据库创建表
    python manage.py makemigrations
    python manage.py migrate

  9、Django orm对数据库操作
    a、基本操作(增、删、改、查)
    b、进阶操作(外建、多对多)正方操作
    c、高级操作(内置方法)

  10、xss攻击

  11、csrf

  12、Cookie(http请求是无状态的短连接)
    a、存放在客户浏览器端的键值对,用于验证用户的合法性
    b、可以自己给值加盐

  13、session (存放在服务器端的数据)
    a、依赖cookie
    b、可以使web网站保持会话
    c、客户端获取的只是一个随机字符串,敏感信息不会给客户端
    d、session数据可以存放在数据库、文件、缓存、缓存+数据库

  14、中间件

 

未完待续...

 

Django知识点汇总