zoukankan      html  css  js  c++  java
  • Django 再次学习笔记整理

    url 路由系统

    urlpatterns = [
    	# path('admin/', admin.site.urls),
    	path('index/', views.index),
    	re_path('^edit/(w+)/$',views.edit1),		# 加上 $  
    	re_path('^edit/(w+).html$',views.edit2),	# 如果前面不加结尾符,则不能匹配此url
    	re_path('^edit/(?P<a2>w+)/(?P<a1>w+).html$',views.edit3), 
    	# 按参数名传参    # def edit3(request,*args,**kwargs):
    	# 不要将(w+)与(?P<a2>w+)混用
    	
    	
    	path('index2/', views.index2,name='n2'),# 给url命名;在函数中通过别名反找到url
    		from django.urls import reverse
    		def index2(request):
    			v = reverse('n2')		
    			return HttpResponse(v)	# 通过别名反找到url,反生成url
    		
    	re_path('index3/(w+)', views.index3,name='n3'),	# 可随意生成(w+)位置的值
    		def index3(request,*args):
    			v = reverse('n3',args=(123,))    
    			# 请求url:index3/3        生成url:index3/123
    			# 有多少(w+),args=(,)就写多少个参数
    			return HttpResponse(v)
    	
    	re_path('^index4/(?P<a2>w+)/(?P<a1>w+).html$', views.index4,name='n4'),# 可随意生成(?P<a2>w+)位置的值
    		def index4(request,**kwargs):
    			v = reverse('n4',kwargs={'a2':666,'a1':777))        # 
    			# 请求url:index4/4/3        生成url:/index4/666/777.html
    			# 有多少(?P<a2>w+),kwargs={,}就写多少个键值对
    			return HttpResponse(v)
    	
    	re_path('^', default)
    		# 此规则放最后
    		# 什么都不输或者输错了,将会被匹配    # def default(request):return HttpResponse('url 错误')
    ]
    
    若是给url命名,在templates模板中可以直接使用名字{% url 'm1' %}
    	path('index10/', views.index10,name='m1'),
    		<form method="post" action="{% url 'm1' %}">        # -><form method="post" action="/index10/">
    	re_path('index10/(w+)/', views.index10,name='m2'),
    		<form method="post" action="{% url 'm3' 'abc' %}">    # "补位"
    
    路由分发:
    	urls.py分配url到app
    	from django.urls import path,re_path,include
    	urlpatterns = [
    		path('app01/', include('app01.urls')),    
    			# 只匹配开头,然后交与app01中的urls继续匹配
    			# 请求url为 http://127.0.0.1:8000/app01/index/        
    			# -> 先匹配到app01 -> app01下的urls中匹配index
    	]
    
    	在app01.urls.py文件下匹配url
    	from django.urls import path,re_path
    	from app01 import views
    
    	urlpatterns = [
    		path('index/', views.index),
    	]
    
    from django.urls import path,re_path,
    re_path(r'^ip/', ([
    					 re_path('^$', daili.display),
    					 re_path('^page_(d)/$', daili.display),	# *args
    					 re_path('^page_(?P<page>d)/$', daili.display)	# **kwargs
    				 ], None, None)),
    
    CBV:
    	path('login.html',views.Login.as_view()),
    
    	from django.views import View
    	class Login(View):    
    		def get(self,request):
    			return HttpResponse('Login.get')
    

      

    模板语言

    # 访问对象的属性,可以直接用.点出需要的值
    {{ obj.id }}
    # 访问字典用dict.key
    {{ dict.key }}
    # 访问元组用tuple.0 索引
    {{ tuple.1 }}
    
    {% url %} 引用路由配置的地址,url的反向解析;
    	{% url 'name' %}
    	
    {% csrf_token %}
    	# 防止跨站攻击,一般只在表单POST提交的时候添加;
    	# 其实,这里会生成一个input标签,将csrf的数据的信息以键值对的方式提交后台;
    
    # 循环
    {% for item in item_list %}  
    	<a>{{ item }}</a>  
      {{ forloop.counter }}
      {{ forloop.first }}
      {{ forloop.last }}
    {% endfor %}
    
    # if else
    {% if ordered_warranty %}
    	。。。
    {% else %}
    	...
    {% endif %}
    
    母板:{% block title %}{% endblock %}
    子板:{% extends "base.html" %}
       {% block title %} 在此嵌入内容 {% endblock %}
    帮助方法:
    	# 字母大写
    	{{ temp|upper}}
    	# 在temp的基础上加3
    	{{ temp|add:3 }}
    	# 按空格切割
    	{{ temp|cut:'' }}
    	# 以固定格式输出时间
    	{{ temp|date:"Y-m-d H:i:s"}}
    	# 内容如果为空,默认输出引号后面的内容
    	{{ temp|default:'空的'}}
    	# 将html的字符串转为html标签显示出来
    	{{ temp|safe }}
    
    自定义模板语言函数
    	创建templatetags目录,在其下创建xxx.py文件
    	使用特殊方法要先导入:{% load xx %}
    	xxx.py
    	from django import template
    	register = template.Library()
    
    	@register.filter                    # 只能有2个参数
    	def my_func(value,arg):
    		return value+arg
    			{{ name|my_func:"666"}}    # 冒号后不能有空格
    			{%if name |my_func%}
    			〈h3〉真〈/h3〉
    			{%else%}
    			〈h3〉假</h3〉
    			{%endif%}
    		
    	#register.simple_tag                # 可传多个参数
    	def my_func(value,a1,a2,a3):
    		return value+a1+a2+a3
    			{% my_func "a11" "a222" "a333"  %}
    
    小组件,可在页面多次加载,可不用{% load xx %}导入
    	{% include 'pub.html' %}
    	pub.html
    		<div>
    			<h3>特别漂亮的组件</h3>
    			<div class="title">标题:{{ name}}</div>
    			<div class="content">内容:{{ name}}</div>
    		</div>
    	index.html
    		<body>{% include 'pub.html' %}
    
  • 相关阅读:
    Nginx报400 Bad Request
    当前系统代理不是安全代理,是否信任
    nginx反向代理解决跨域问题
    SQL Prompt快捷键
    本地SQL Server怎么连接服务器上的数据库
    进制之间的转换
    计算机知识汇总
    C#语言学习记录
    excel常用技巧
    T-SQL学习记录
  • 原文地址:https://www.cnblogs.com/ming-yuan/p/10352363.html
Copyright © 2011-2022 走看看