django--基础1

manage.py ----- Django项目里面的工具,通过它可以调用django shell和数据库,启动关闭项目与项目交互等,不管你将框架分了几个文件,必然有一个启动文件,其实他们本身就是一个文件。
settings.py ---- 包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量。
urls.py ----- 负责把URL模式映射到应用程序。
wsgi.py ---- runserver命令就使用wsgiref模块做简单的web server,后面会看到renserver命令,所有与socket相关的内容都在这个文件里面了,目前不需要关注它。

 

两个框架模式

MVC  
    M:models数据库相关
    V:views 视图逻辑相关
    C:controller控制器 url分发 不同的路径找到不同的视图函数
MTV
    M:models数据库相关
    T:templates模板 ,HTML文件
    V:views 视图逻辑相关
    + url控制器 不同的路径找到不同的视图函数
MVVM 后面介绍

 

 

1 写项目

1 创建项目  first_pro
2 创建app  app01 
做一个登录页面的web项目,浏览器输入一个网址得到一个web页面

用户:  http:127.0.0.1:8001/login/


1 urls.py
    from django.conf.urls import url 
    from django.contrib import admin 
    from app01 import views


 urlpatterns = [
        # url(r'^admin/', admin.site.urls),
        url(r'^index/', views.index),  #配置路径,r'^/index/',这个前置导航斜杠不需要添加.
    ]


2 写逻辑视图
    from django.shortcuts import render,HttpResponse 
    # Create your views here.

 def index(request):
        print(request.method) #'POST' 'GET'
        if request.method == 'GET':
            return render(request,'login.html') 
        else:
            # print(request.GET) 
            print(request.POST)
            username = request.POST.get('username') 
            password = request.POST.get('password') 
            if username == 'dazhuang' and password == '123': 
                return HttpResponse('登录成功!')
            else:
                return HttpResponse('登录失败!')


3 创建html文件 
    在templates文件夹中创建一个login.html文件


<!DOCTYPE html>
        <html lang="zh-CN">
        <head>
          <meta charset="utf-8">
          <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
          <meta name="viewport" content="width=device-width, initial-scale=1"> 
          <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
          <title>Bootstrap 101 Template</title> 
          <!-- Bootstrap -->
        </head>
        <body>

<h1>欢迎来到登录页面</h1>

<form action="/index/" method="post"> 
          用户名:<input type="text" name="username"> 
          密码:<input type="text" name="password">
          <input type="submit">

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

urls.py里面需要注意的问题
    url(r'^index/', views.index),  第一个参数:路径正则字符串  第二个参数:对应的视图函数

views.py
    def login(request): 
        获取请求方法,request.method--'GET','POST' 
        request.GET -- GET请求发送来的所有数据,queryDict类型 
        request.POST -- POST请求发送来的所有数据,queryDict类型
            <input name='username'> 
            request.POST.get('username') 
            request.GET.get('username')
        return HttpResponse('字符串')  --- 回复字符串数据
        retuen render(request,'login.html')


get请求获取数据

def index(request):
    print(request.GET)  #<QueryDict: {'username': ['dazhuang'], 'password': ['123']}> 
    username = request.GET.get('username')
    password = request.GET.get('password')
    print(username,password)

if username == 'dazhuang' and password == '123': 
        return HttpResponse('登录成功!')
    else:
        return HttpResponse('失败!')


post请求提交数据时关掉一个认证机制,settings配置文件中

MIDDLEWARE = [ 
    'django.middleware.security.SecurityMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    #'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

url配置

无名分组
url(r'^books/(\d{4})/', views.books),

位置参数
    url(r'^books/(\d{4})/', views.year_books),  #匹配年份的 
    url(r'^books/(\d{4})/(\d{1,2})/', views.year_month_books), #匹配年份和月份的
# http://127.0.0.1:8000/books/2001/

   视图:
        def year_month_books(request,year,month):  #位置参数,第一个参数接收的就是无名分组路径中匹配 到的第一个分组的数据,第二个参数接收的就是无名分组路径中匹配到的第二个分组的数据
            print(year,month)
            # return render(request,'books.html') 
            return HttpResponse(year+month)


有名分组

   url(r'^books/(?P<year>\d{4})/(?P<month>\d{1,2})/', views.year_month_books), #匹配年份和月 份的

    def year_month_books(request,month,year):  #形参名称要和url中的分组名对应好,参数位置就没有要求
了
        print(year,month)

  # return render(request,'books.html') 
        return HttpResponse(year+month)

默认值

 

# urls.py中
from django.conf.urls import url

from . import views
urlpatterns = [
    url(r'^blog/$', views.page), 
    url(r'^blog/page(?P<num>[0-9]+)/$', views.page),
]

# views.py中,可以为num指定默认值
def page(request, num="1"): 
    pass

 

posted @ 2020-07-28 08:34  水晶冰洛  阅读(138)  评论(0编辑  收藏  举报