首页 > 代码库 > django

django

MTV模式      

        著名的MVC模式:所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层;他们之间以一种插件似的,松耦合的方式连接在一起。

        模型负责业务对象与数据库的对象(ORM),视图负责与用户的交互(页面),控制器(C)接受用户的输入调用模型和视图完成用户的请求。

        技术分享

       Django的MTV模式本质上与MVC模式没有什么差别,也是各组件之间为了保持松耦合关系,只是定义上有些许不同,Django的MTV分别代表:

       Model(模型):负责业务对象与数据库的对象(ORM)

       Template(模版):负责如何把页面展示给用户

       View(视图):负责业务逻辑,并在适当的时候调用Model和Template

       此外,Django还有一个url分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template

技术分享

 

 

 Django url

URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表;你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。URL的家在是从配置文件中开始。

技术分享

 

参数说明:

  • 一个正则表达式字符串
  • 一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
  • 可选的要传递给视图函数的默认参数(字典形式)
  • 一个可选的name参数

示例:

技术分享
 1 #默认没有导入views
 2 from myapp import views
 3 
 4 urlpatterns = [
 5     url(r^admin/, include(admin.site.urls)),
 6     url(r^articles/2003/$, views.case1),
 7     url(r^articles/([0-9]{4})/$, views.year_archive), #0-9范围4位数字
 8     url(r^articles/([0-9]{4})/([0-9]{2})/$, views.month_archive),
 9     url(r^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$, views.article_detail),
10 ]
11 
12 #([0-9]{4})这个用括号括起"()"来的数据是给视图的参数
urls.py
技术分享
 1 #-*- coding:utf-8 -*-
 2 from django.shortcuts import render,HttpResponse
 3 
 4 # Create your views here.
 5 
 6 def case1(request):
 7     #获取url请求方式是post还是get
 8     print(request.method)
 9     return HttpResponse(request)
10 
11 def year_archive(request,year):
12     #url中"()"传递来的参数
13     year=year
14     return HttpResponse(year)
15 
16 def month_archive(request,year,month):
17     print(year,month)
18     result=year+month
19     return HttpResponse(result)
20 
21 
22 
23 def article_detail(request,year,month,ar_id):
24     result=year+month+ar_id
25     return HttpResponse(result)
views.py

 

app独立urls,进行urls层面的解耦,现在创建的urls都是在全局的urls中创建。

技术分享
1 #在全局urls中配置,以后访问app01的就找myapp下的urls
2 urlpatterns = [
3     url(r^admin/, include(admin.site.urls)),
4     url(r^app01/,include(myapp.urls)),
5 ]
urls.py
技术分享
1 from myapp import views
2 from django.conf.urls import include, url
3 
4 urlpatterns = [
5 url(r^articles/2003/$, views.case1,),
6 ]
7 
8 #web 请求格式http://127.0.0.1:8000/app01/articles/2003/
Views.py

 

url别名设置,这个还是很有用的

技术分享
1 #name是固定的形参
2 urlpatterns = [
3 url(r^articles/2003/$, views.case1,name=cname),
4 ]
urls.py
技术分享
 1 #这个函数不是重点,只是为了测试别名
 2 def index(req):
 3     #如果是post方法就执行下面的方法了
 4     if req.method==POST:
 5         username=req.POST.get(username)
 6         password=req.POST.get(password)
 7         if username==xxxxx and password==123:
 8             return HttpResponse("登陆成功")
 9 
10 
11 
12     return render(req,index.html)
Views.py
技术分享
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body>
 8 {#     <form action="/index/" method="post">#}
 9      <form action="{% url ‘cname‘ %}" method="post">
10          用户名:<input type="text" name="username">
11          密码:<input type="password" name="password">
12          <input type="submit" value=http://www.mamicode.com/"submit">
13      </form>
14 </body>
15 </html>
16 
17 #简单说就是我后端的函数明可以任意更改也不会影响到前端的路径
18 action="{% url ‘cname‘ %}" 
html

 

 

VIEW视图

http请求中产生两个核心对象:

http请求:HttpRequest对象

http响应:HttpResponse对象

所在位置:django.http

之前我们用到的参数request就是HttpRequest    检测方法:isinstance(request,HttpRequest)

HttpRequest对象的属性:

技术分享

技术分享

技术分享
# path:       请求页面的全路径,不包括域名
#
# method:     请求中使用的HTTP方法的字符串表示。全大写表示。例如
#
#                    if  req.method=="GET":
#
#                              do_something()
#
#                    elseif req.method=="POST":
#
#                              do_something_else()
#
# GET:         包含所有HTTP GET参数的类字典对象
#
# POST:       包含所有HTTP POST参数的类字典对象
#
#              服务器收到空的POST请求的情况也是可能发生的,也就是说,表单form通过
#              HTTP POST方法提交请求,但是表单中可能没有数据,因此不能使用
#              if req.POST来判断是否使用了HTTP POST 方法;应该使用  if req.method=="POST"
#
#
#
# COOKIES:     包含所有cookies的标准Python字典对象;keys和values都是字符串。
#
# FILES:      包含所有上传文件的类字典对象;FILES中的每一个Key都是<input type="file" name="" />标签中                     name属性的值,FILES中的每一个value同时也是一个标准的python字典对象,包含下面三个Keys:
#
#             filename:      上传文件名,用字符串表示
#             content_type:   上传文件的Content Type
#             content:       上传文件的原始内容
#
#
# user:       是一个django.contrib.auth.models.User对象,代表当前登陆的用户。如果访问用户当前
#              没有登陆,user将被初始化为django.contrib.auth.models.AnonymousUser的实例。你
#              可以通过user的is_authenticated()方法来辨别用户是否登陆:
#              if req.user.is_authenticated();只有激活Django中的AuthenticationMiddleware
#              时该属性才可用
#
# session:    唯一可读写的属性,代表当前会话的字典对象;自己有激活Django中的session支持时该属性才可用。
方法

HttpRequest对象的方法:get_full_path(),   比如:http://127.0.0.1:8000/index33/?name=123 ,req.get_full_path()得到的结果就是/index33/?name=123

 

 2 HttpResponse对象:

   对于HttpRequest对象来说,是由django自动创建的,但是,HttpResponse对象就必须我们自己创建。每个view请求处理方法必须返回一个HttpResponse对象。

  HttpResponse类在django.http.HttpResponse

  在HttpResponse对象上扩展的常用方法:页面渲染:render,render_to_response,

                                                        页面跳转:redirect

                                                        locals:   可以直接将函数中所有的变量传给模板 

def case1(request,foo):
    #locals()把方法中的变量全部传递给页面
    return render_to_response("index.html",locals())

 

 

 

总结:

一、创建以及运行

    1、创建project

            django-admin startproject myproject

     2、创建app   

            cd mysite

            python startapp app01

     3、运行程序

           python manage.py  runserver 0.0.0.0:8080

二、目录结构

三、操作

       1.配置路由url,对象函数

       2.返回数据给前端页面的三种方式

         def test(request):

                 return HttpResponse("xxxxx")#第一种

                 return render(request,‘xxx.html‘)#支持csrf

                 return render_to_response("index.html",{"aa":"aaaaa"})#不支持cstf

                 retrun redirect(‘/xxx/xxx‘)#这个不是跳转html而是一个url地址

      3.配置文件-----settings.py

             

技术分享
1 TEMPLATE_DIRS = (
2         os.path.join(BASE_DIR,templates),
3     )
模板目录配置

 

        4配置静态文件增加:     

技术分享
1 STATIC_URL = /static/
2 #在上面的命令底下增加
3 STATICFILES_DIRS=(
4     os.path.join(BASE_DIR,static),
5 )
View Code

    5配置myslq连接

技术分享
 1 DATABASES = {
 2     default: {
 3     ENGINE: django.db.backends.mysql,
 4     NAME:dbname,
 5     USER: root,
 6     PASSWORD: xxx,
 7     HOST: ‘‘,
 8     PORT: ‘‘,
 9     }
10 }
配置mysql

注册app

INSTALLED_APPS增加app,然后才能执行下面的命令生成数据库表

python manage.py makemigrations

python manage.py migrate

          

7modal字段

 

8基本操作

orm

 

9。queryset

  ret=Author.object.all()

  ret.query #获取查询的sql语句

 10. 模板语言

{% if  sdf %}

{% else %}

{% endif  %}

 

{%for item in li%}

     {{item}}

{%endfor%}

django