首页 > 代码库 > 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})
获取请求匹配成功的URL信息:request.resolver_match
三、视图
a、FBV (func-base-view) 基于函数的视图
路由关系 url(r‘^login.html$‘,views.login,name=‘login‘) 视图函数 def login(request): return HttpResponse(‘登录成功!‘)
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()
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‘, ]
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知识点汇总