Django 的操作

安装:

pip install Django

 

创建django工程

django-admin startproject  mysite 

python manage.py startapp blog

//urls 里添加  ,注意导入路径文件 ,在views 里添加对应的函数 def show_time():pass;

urlpatterns = [
    path('admin/', admin.site.urls),
    path('show_time/', views.show_time), //对应的文件
]

在导入html文件的时候要注意

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR),"templates"],   //此处创建一个templates,添加路径,识别视图
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

启动工程

terminal-----:python manage.py runserver 127.0.0.1:8080

需要使用jquery的时候需要创建static静态文件

//插入以下代码
// static/jquery-x.x.x.js
//当时调用的时候出错了,这里使用中括号或者下面的那段,末尾加,    =.=!~

STATIC_URL = '/static/'     #别名,如果修改了下面static文件名字,这里不影响前端导入
STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static") //识别, ]
// STATICFILES_DIRS=(
// os.path.join(BASE_DIR,"static"),
// )
 

 Django URL (路由系统)

//tree:urls


urlpatterns=[

    url(r"...",...)
    
    url(r'article/(\d{4})',views.article_year    #加括号代表分组 可以取得参数,无名分组
    //url(r'article/(?p<year>\d{4})',views.article_year #命名分组   
]    


//tree:views   #无命名分组

def article_year(request,year)
      return HttpResponse("year:%s"%year)   

以上是1.x 版本的正则表达方式,在做实验的时候本人使用的是2.x版本,竟然报错。一看文档2.x已经非常简化
 url(r'article/(\d{4})',views.article_year 将改成以下
path("article/<int:year>/",views.article_year #<类型:命名>

Django默认支持以下5个转化器:

  • str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
  • int,匹配正整数,包含0。
  • slug,匹配字母、数字以及横杠、下划线组成的字符串。
  • uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
  • path,匹配任何非空字符串,包含了路径分隔符
 
注册自定义转化器
对于一些复杂或者复用的需要,可以定义自己的转化器。转化器是一个类或接口,它的要求有三点:

regex 类属性,字符串类型

to_python(self, value) 方法,value是由类属性 regex 所匹配到的字符串,返回具体的Python变量值,以供Django传递到对应的视图函数中。

to_url(self, value) 方法,和 to_python 相反,value是一个具体的Python变量值,返回其字符串,通常用于url反向引用。

例子:



[python] view plain copy
class FourDigitYearConverter:  
    regex = '[0-9]{4}'  
    def to_python(self, value):  
        return int(value)  
    def to_url(self, value):  
        return '%04d' % value  



使用register_converter 将其注册到URL配置中:


[python] view plain copy
from django.urls import register_converter, path  
from . import converters, views  
register_converter(converters.FourDigitYearConverter, 'yyyy')  
urlpatterns = [  
    path('articles/2003/', views.special_case_2003),  
    path('articles/<yyyy:year>/', views.year_archive),  
    ...  
]  


使用正则表达式
如果上述的paths和converters还是无法满足需求,也可以使用正则表达式,这时应当使用 django.urls.re_path函数。

在Python正则表达式中,命名式分组语法为 (?P<name>pattern) ,其中name为名称, pattern为待匹配的模式。

之前的示例代码也可以写为:




[python] view plain copy
from django.urls import path, re_path  
from . import views  
urlpatterns = [  
    path('articles/2003/', views.special_case_2003),  
    re_path('articles/(?P<year>[0-9]{4})/', views.year_archive),  
    re_path('articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/', views.month_archive),  
    re_path('articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[^/]+)/', views.article_detail),  
]  


这段代码和之前的代码实现了基本的功能,但是还是有一些区别:

这里的代码匹配更加严格,比如year=10000在这里就无法匹配。
传递给视图函数的变量都是字符串类型,这点和 url 是一致的。
注册自定义转化器

 

----别名概念

//别名:添加一个学生注册
在templates 创建register.html视图
<form action="{% url 'reg' %}" method = "post">
urlpatterns=[

    url(r"...",...)
    
   
    //url(r'register',views.register,name="reg"), # 别名识别,就算修改了register是其他名称也不影响全局
]    

 

def register(request):
# print(request.GET)
# print(request.GET.get("user"))

if request.method=="POST":
print("--------------------")
print(request.POST)
print(request.POST.get("user"))
return HttpResponse("success!")
return render(request,"register.html")
 
<form action="{% url 'reg' %}" method="post">

 跳转:

redirect("/blog/login/")

posted on 2018-06-10 23:22  野生大魔王  阅读(135)  评论(0)    收藏  举报