Django【一】

Django

MTV框架模型:

Model:数据存取层,处理与数据相关的所有事物,默认是db.sqlite3,我们也可以使用其他数据库,比如mysql,oracle

Temple:业务逻辑层,模型和模板的桥梁

Views:表现层,处理与表现层相关的决定,如何在页面中显示

一、创建项目

1.首先安装Django

pip install Django==2.0.3

我这里安装出现超时,加个源即可

pip install Django==2.0.3  -i https://pypi.tuna.tsinghua.edu.cn/simple/

2.创建django项目

选择你想要创建项目的路径,cmd执行

>django-admin startproject MyDjango

  说明:

  • manage.py 命令行工具,python manage.py help查看帮助
  • urls.py  url设置 访问地址
  • wsgi.py python服务器网管接口,python应用于服务器之间的接口,一般不需要改

3.检查django环境

cmd执行

python manage.py runserver 0.0.0.0:8000

 

二、创建app

app可以理解为一个应用,一个项目下可以有多个应用

使用命令:

> python manage.py startapp xiao

 三、settings添加应用

四、视图和url 

试图views.py

我们访问一个url地址时,我们希望返回一个html页面,那么定义这个规则的函数,我们称之为视图函数views.py

from django.shortcuts import render

# Create your views here.

from django.http import  HttpResponse

def hello(request):
    return HttpResponse("Hello World!")

 url.py

具体在浏览器输入哪个地址可以访问呢?我们称之为路由配置,也就是在urls.py配置访问路径,path是访问的绝对路径,url可以支持正则匹配,url.py

from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from MyDjango.xiao import views

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^hello$',views.hello())
] 

正则:

  • ^ 匹配字符串开头,在多行模式中匹配每一行的开头,如^abc  abc
  • $匹配字符串末尾,在多行模式中匹配每一行的末尾,如 abc$  abc

一般推荐url配置路径/$结尾

 urls配置规则

  • path:只能匹配路径地址,不支持正则匹配
  • re_path:支持正则匹配,django 1.0版本常用
  • url:支持正则匹配,实际上就是return_re,Django 2.x版本推荐

这三者之间可以通过源码查看区别,总结来说可以统一用url()就可以,匹配路径统一在后面加/,前面不用加,如index/,page/等

五、扩展

5.1如何返回json对象呢?

1.views.py,创建views函数

from django.shortcuts import render

# Create your views here.

from django.http import  JsonResponse

def hello_json(request):
    res={
        "code":0,
        "msg":"成功success",
        "datas":[]
    }
    return JsonResponse(res)

2.配置url

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^hello$',views.hello),
    url(r'hello_json/$',views.hello_json)
]

 5.2如何返回一个html页面?

1.新建模板templates,放项目根目录或放在app下也可以,在settings配置模板路径

 'DIRS': [os.path.join(BASE_DIR,'templates')],

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,'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',
            ],
        },
    },
]

2.在templates下新建login.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录页</title>
</head>
<body>
<h1>欢迎进入登录页</h1>
<form action="" method="post" id="login-form">
    <p>
        用户名:<input id="id_username",maxlength="254",name="username",required="required">
    </p>
     <p>
       密码: <input id="id_pwd",maxlength="254",name="pwd",required="required">
    </p>
    <p>
        <input type="submit" value="登录">
    </p>
    <a>

    </a>
</form>
</body>
</html>

3.视图函数views.py,用render渲染html页面

from django.shortcuts import render
def login_demo(request):
    return render(request,'login.html')

4.url配置

from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from xiao import views

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^hello$',views.hello),
    url(r'hello_json/$',views.hello_json),
    url(r'^login_demo/$',views.login_demo)
]

 5.3如何加载一张静态图片?

1.在app项目下新建一个static文件夹,将图片放到static目录下

直接访问:http://localhost:8000/static/1.jpg

5.4怎么获取数据?有些url是动态生成的,并不是固定的

比如:https://www.cnblogs.com/june-/archive/2019/04.html

1.试图函数

from django.http import  JsonResponse

def archieve(request,year,month):
    res={
        "code":0,
        "msg":"成功success",
        "datas":[{
            "year":year,
            "month":month
        }]
    }
    return JsonResponse(res)

2.url配置

urlpatterns = [
    path('june-/archive/<year>/<month>.html',views.archieve)
]

当然也可以正则匹配

url(r'june-/archive/(?P<year>[0-9]{4})/(?P<month>[0-9]{2}).html',views.archieve)
  1. ?P是固定格式
  2. <year><month>是变量名称
  3. [0-9] 0-9任意数字
  4. {4} 4位数字

 

posted @ 2020-03-10 10:21  做一只热爱生活的小透明  阅读(113)  评论(0)    收藏  举报