django 整理一

django 整理:

url路由规则

  django中的路由系统和其他语言的框架有所不同,在django中每一个请求的url都要有一条路由映射,这样才能将请求交给对一个的view中的函数去处理。其他大部分的Web框架则是对一类的url请求做一条路由映射,从而是路由系统变得简洁。

不接收变量:
	url(r^index/$,views.index),      	

按url顺序接收变量:
	url(r^index/(\d*),views.index),		

# 根据变量名接收变量:
	url(r‘^manage/(?P<name>\w*)/(?P<id>\d*)‘, views.manage),   

# 根据变量名接收变量,还可以传固定变量:
	url(r‘^manage/(?P<name>\w*)‘, views.manage,{‘id‘:333}),    

# 根据app分发不同的url:
	url(r‘^web/‘,include(‘web.urls‘)),    

# name=‘add‘ 给地址取别名,模板跟views中都可以用别名,防止url变更而造成的麻烦
	url(‘add/(\d+)_(\d+)/$‘, views.home, name=‘add‘)     

	views.py中使用:
		from django.urls import reverse

		def home(request,a,b):
			print(reverse(‘add‘, args=(a, b)))     # reverse函数反向获取url: /add/4_9/
			result = str(int(a) + int(b))
			return render(request, ‘home.html‘, {‘result‘: result})

	template中使用:
		不带参数的:
			{% url ‘name‘ %}
		带参数的:参数可以是变量名
			{% url ‘name‘ 参数 %}
		<a href="{% url ‘add‘ 4 5 %}">{{result}}</a>

	访问的url:http://127.0.0.1:8000/add01/4_5

# namespace=‘blog01‘ 别名空间:
	url(‘blog02/‘, include(‘blog.urls‘, namespace=‘blog01‘)),

	template中使用:
		<a href="{% url ‘blog:add‘ 4 5 %}">{{result}}</a>

	blog.urls.py文件:
		app_name = ‘blog‘

		urlpatterns = [
			url(r‘^add01/(\d+)/(\d+)‘, views.home, name=‘add‘),
		]

	urls.py文件:

		url(‘blog02/‘, include(‘blog.urls‘, namespace=‘blog01‘)),

	views:

		from django.urls import reverse

		def home(request,a,b):
			print(reverse(‘blog:add‘, args=(a, b)))     # /blog02/add01/4/5
			result = str(int(a) + int(b))
			return render(request, ‘home.html‘, {‘result‘: result})

	访问的url:http://127.0.0.1:8000/blog02/add01/4/5

FBV 与 CBV

  所谓 FBV 和 CBV 是指 url 和view的对应关系

    FBV function base view /url/ --> 函数

    CBV class base view /url/ -->类

 1 urls文件:
 2     from django.conf.urls import patterns, include, url
 3
 4     urlpatterns = [
 5         url(r‘^index/$‘, views.register),
 6     ]
 7
 8
 9 views文件:
10
11     #!/usr/bin/env python
12     #coding:utf-8
13
14     from django.shortcuts import render_to_response,HttpResponse,redirect
15
16     def index(request):
17
18         username = request.session.get(‘username‘)
19         # username = request.session[‘username‘]
20
21         print("username:",username)
22         art_obj = Article.objects.all()
23
24         if not username:
25             login_status = {"register": "注册", "login": "登陆"}
26         else:
27             login_status = {"dynamic": "动态", "inform": "通知", "username": username}
28
29         return render(request, ‘index.html‘, {‘login_status‘: login_status, ‘art_obj‘: art_obj})

FBV实例

 1 urls文件:
 2
 3     url(r‘^cbv‘,views.CBVtest.as_view()),
 4
 5
 6 views文件:
 7
 8     class CBVtest(View):
 9         def dispatch(self, request, *args, **kwargs):
10             print("类似装饰器:before")
11             result = super(CBVtest, self).dispatch(request, *args, **kwargs)
12             print("类似装饰器:after")
13             return result
14
15         def get(self, request):  # 定义get方法,get请求执行这个方法
16             print(request.method)
17             return HttpResponse(‘cbvget‘)
18
19         def post(self, request):  # 定义post方法,post请求执行这个方法
20             print(request.method)
21             return HttpResponse(‘cbvpost‘)

CBV实例

模板引用

block定义:
	block定义一个模板块。子模板的block会覆盖父模板同名的block块。如果想要子模块不覆盖父模块的内容,而是新增,可以使用 block.super。
用法:
	{% block index %}
		 子模板会替换父模板block index中的内容
	{% endblock %}
	{% block index %}
		{{ block.super }}
		子模板新增的内容
	{% endblock %}
extends定义:
	extends表示的是继承。通常,一个项目会写一个base.html和若干widget.html。项目中的大部分页面,都会继承自base.html。
用法:
	extends的参数一般为字符串,也可为变量。注意使用extends时,extends一定要是第一个tag标签,否则不会生效。

	{% extends ‘base.html‘ %}

	extends 标签的作用是,告诉模版引擎本模版继承了 base.html 作为父模板。
include定义:
	include将其他模板,以插件的形式,直接添加在当前的模板中。
用法:
	可带路径、相对路径、使用变量名。

	{% include ‘tools.html‘ %}

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8" http-equiv="Content-Type" content="text/html">
 5 </head>
 6 <body>
 7
 8     <h4>图书信息</h4>
 9
10     <p>书名: {% block title %}书名(请自定义){% endblock %}</p>
11
12     <p>作者: {% block author %}作者名(请自定义){% endblock %}</p>
13 </body>
14 </html>

base.html

 1 <html>
 2 <body>
 3     {% extends "temp/base.html" %}
 4
 5     <!--{% block title %}红楼梦{% endblock %} -->      <!-- 不能同时出现两个block title 类似的,去除脏数据的方法是改成不同名称 -->
 6     <!--{% block author1 %}曹雪芹{% endblock %}-->
 7
 8     {% block title %}
 9         {{ block.super }}     <!-- 继承base.html中的内容 -->
10         西游记
11     {% endblock %}
12     {% block author %}
13         {{ block.super }}
14         吴承恩
15     {% endblock %}
16 </body>
17 </html>

index.html -- 子类

Cookie 知识点

  1. Cookie 只能保存字符串类型,request.COOKIES[key] = value

  2.  不能保存重要的信息

  3.  只用于存在客户端的数据

存取Cookies

   1、设置Cookies
       response.set_cookie("cookie_key","value")
   2、获取Cookies
       value = request.COOKIES["cookie_key"]
   3、删除Cookies
       response.delete_cookie("cookie_key",path="/",domain=name)
   4、检测Cookies
       if "cookie_name" is request.COOKIES :
   5、response.set_cookie() 传递一些可选的参数 描述
       参数      缺省值       描述
       max_age  None  cookies的持续有效时间(以秒计),如果设置为 None cookies 在浏览器关闭的时候就失效了。
       expires  None  cookies的过期时间,格式: "Wdy, DD-Mth-YY HH:MM:SS GMT" 如果设置这个参数,
                           它将覆盖 max_age 参数。
       path      "/"     cookie生效的路径前缀,浏览器只会把cookie回传给带有该路径的页面,这样你可以避免将
                           cookie传给站点中的其他的应用。
                           当你的应用不处于站点顶层的时候,这个参数会非常有用。
       domain      None    cookie生效的站点。你可用这个参数来构造一个跨站cookie。如, domain=".example.com"
                           所构造的cookie对下面这些站点都是可读的: www.example.com 、 www2.example.com 和
                           an.other.sub.domain.example.com 。
                           如果该参数设置为 None ,cookie只能由设置它的站点读取。
       secure      False  如果设置为 True ,浏览器将通过HTTPS来回传cookie。

Cookies规则

    1、Cookies是以字典方式存储,(Key—>Value的键值对方式存储),访问是只要访问Session的键就可以得到键对应的Value
       如果:value = response.set_cookie("cookie_key","value")
    2、存储到客户端
       优点:
           数据存在在客户端,减轻服务器端的压力,提高网站的性能。
       缺点:
           1、安全性不高:在客户端机很容易被查看或破解用户回话信息

Cookies实例:

 1 def set_user(request, hour=0, name="admin"):
 2     dt = datetime.datetime.now() + datetime.timedelta(hours=int(hour))
 3     html = "设置用户%s为登录回话,过去时间: %s" % (name, str(dt))
 4     response = HttpResponse(html)
 5     response.set_cookie("username", name, expires=dt)
 6     return response
 7
 8
 9 def show_user(request):
10     html = ""
11     if "username" in request.COOKIES:
12         name = request.COOKIES["username"]
13
14         dt = datetime.datetime.now() + datetime.timedelta(hours=int(1))
15         html = "设置用户%s过期时间为:%s" % (name,str(dt))
16         response = HttpResponse(html)
17
18         response.set_cookie("username", name, expires=dt)
19
20     response = HttpResponse(html)
21     return response

views.py

1     url(r‘^set/(?P<hour>\d+)/(?P<name>\w+)‘,views.set_user),
2     url(r‘^show/‘,views.show_user),

urls.py

  

 

原文地址:https://www.cnblogs.com/sshcy/p/9174069.html

时间: 2024-10-28 18:33:43

django 整理一的相关文章

Django整理1

基本结构 │ db.sqlite3 ----------sqlie3数据库 │ manage.py │ ├─logres │ │ admin.py 后台,可以用很少量的代码就拥有一个强大的后台. │ │ apps.py │ │ models.py 与数据库操作相关,存入或读取数据时用到这个 │ │ tests.py │ │ urls.py │ │ views.py │ │ 处理用户发出的请求,从urls.py中对应过来, 通过渲染templates中的网页可以将显示 │ │ 内容比如登陆后的用户

Django整理(三) - 配置文件

项目常用配置 在项目的 setting.py 配置文件中,进行项目相关配置的修改. 1. BASE_DIR 当前项目的根目录,Django会依此来定位工程内的相关文件,我们也可以使用该参数来构造文件路径. 2. DEBUG · 含义:是否为调试模式(开发模式),默认为True · 作用:当DEBUG为True时,如果Django程序运行出现异常时,会在浏览器显示详细的出错调试信息 (如下图),而非调试模式下,不会显示出错调试信息:     [重要]项目运行出错了,需要查看是哪一行代码造成出错,再

django整理

前端 1. js的循环each 前端需要循环,可以借助each这个方法 var dic = {'key1':'value1','key2':'value2'}; var lis = ['1','3','2']; //each(变量, 方法) $.each(lis, function (index, obj) { console.log(index, obj) }) // 如果传入的变量是对象object(字典),那么方法中的index,和value分别是key和value //key1 valu

web开发框架Django笔记整理

安装 python  setup.py  install 使用 1.创建工程 django-admin.py startproject Data_Collet_Center 2.运行开发server python manage.pyrunserver 0.0.0.0:8000 3.创建应用 python manage.py startapp DCC 4.配置 Data_collect_Center/settings.py 配置DB: 'ENGINE': 'django.db.backends.s

django models 类型整理 version:1.8.3

django models 类型整理 version:1.8.3 网上百度到的最上面的一篇已经是11年的了,django变化很大,现在把1.8.3版的models类型大致整理了下贴出来 普通键部分 Field Params in database attention AutoField **options integer 在django代码内是自增 BooleanField **options boolean\bit   BinaryField [**options] blob   BigInt

框架----Django框架知识点整理

一.cbv 1 cbv(class-base-view) 基于类的视图 2 fbv(func-base-view) 基于函数的视图 a.基本演示 1 urlpatterns = [ 2 3 url(r'^login.html$', views.Login.as_view()), 4 ] urls.py 1 from django.views import View 2 3 class Login(View): 4 """ 5 get 查 6 post 创建 7 put 更新

Django模板系统学习整理

block extends include三者的差别跟用法 一.定义基础模板,在html内容中定义多个block块,block由子模板引用同名block块,来决定是否替换这些部分 {% block title %}一些内容,这里可不填{% endblock %} {% block content %}一些内容,这里可不填{% endblock %} {% block footer %}一些内容,这里可不填{% endblock %} 这里 title content footer 不是变量,名字

BAE部署Django项目流程整理

1.首先在BAE上创建一个应用名称并付费2.把应用文件夹git到本地,此时文件夹会多出三个文件app.conf,favicon.ico,index.py3.在应用文件夹内创建本地项目:myblog,并在本地项目内创建一个项目app:blog4.修改app.conf文件内容为: 1 handlers: 2 - url : /static/(.*) 3 script : /myblog/static/$1 4 - url : /templates/(.*) 5 script : /templates

Django笔记-常见错误整理

1.csrf错误 解决方法:在settings.py里注释掉相关内容即可 MIDDLEWARE_CLASSES = ( 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', #'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.Authenticat