zoukankan      html  css  js  c++  java
  • 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="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%}

  • 相关阅读:
    5.对象的简化属性
    7.函数参数默认值
    python中argparse
    VC 6.0 打开文件出错
    【UNIX程序设计教程】 阅读初体验(1)
    引以为鉴ARM开发板连线注意事项
    windows xp宿主机 + Linux 虚拟机 网络配置
    Gcc编译选项分析
    ADS下调试出现的警告信息
    S3C2440串口通讯实现
  • 原文地址:https://www.cnblogs.com/menkeyi/p/6785429.html
Copyright © 2011-2022 走看看