命令行创建项目:
pip install django
django-admin startproject mysite
cd mysite
python manage.py runserver 127.0.0.1:8080
默认情况下是访问8080端口
在浏览器中输入以上网址看到如下界面说明创建成功:
pycharm创建
用pycharm创建项目就比较简单了,要保证系统安装了python的环境
Django的程序目录
- mysite
- mysite
- _init_.py
- settings.py
- urls.py
- wsgi.py
- templates
- manage.py
- mysite
settings.py-------------------Django配置文件
urls.py------------------------路由系统:url与函数的对应关系
wsgi.py-----------------------用于定义Django用什么socket实现,默认使用wsgiref,生产环境下会用到uwsgi
manage.py------------------对当前Django程序所有操作可以基于python manage.py runserver manage.py
第一个Django请求
启动项目之后在浏览器中输入:http://127.0.0.1:8080/login 就可以看到通过HttpResponse返回的信息,需要注意的是:HttpResponse里面填的都是字符串,
- 当我们填写的是
<input type="text" />
时,会返回一个文本输入框, - 当我们在templates下新建一个
login.html
文件填写到HttpResponse中时,启动项目返回的是字符串login.html,而不是解析出的内容
可以这样修改:
render的第一个参数必须是request,自动找到模板路径下的login.html文件,读取内容并返回给用户
模板的路径可以修改,但以下两个地方要保持一致:
在写静态文件(如html)时,通常需要引入css或者js文件,我们将其放在一个文件夹sta(名称可自定义)中,需要注意的是,这个文件夹的路径需要在settings.py中配置,否则引入sta中的文件时不会生效。
项目运行时,会通过STATIC_URL来找到我们自定义的文件夹sta,在login.html中引入sta下的common.css时,需要用STATIC_URL的static作前缀<link rel="stylesheet" href="/static/common.css"/>
,而不是sta,所以通常情况下我们会将文件夹直接命名为static
STATICFILES_DIRS配置路径时,后面的一定要加都要逗号,因为它是一个元组类型的数据
sta的名称可以自定义
BASE_DIR表示项目的路径
Django创建程序步骤
- 创建project
- 配置:
- 模板路径:templates
- 静态文件路径:STATICFILES_DIRS
- 额外配置:注释掉settings.py中这一句
- url的对应关系:urlpatterns
如:
/login/ --->login
def login(request):
request.method
request.GET --->请求头中的url,类似:/login/?name=wwy&pwd=123
request.POST--->请求体
return HttpResponse(...)
return render(request, 'login.html',{......})
return redirect('要跳转的网址')
案例:用户登录
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
<link rel="stylesheet" href="/static/common.css"/>
</head>
<body>
<h1>用户登录</h1>
<form action="/login/" method="post">
<input type="text" name="username"/>
<input type="password" name="password"/>
<input type="submit" value="登录"/>
{{ msg }}
</form>
</body>
</html>
from django.contrib import admin
from django.urls import path
from django.shortcuts import HttpResponse, render, redirect
def login(request):
"""
处理用户请求,并返回内容
:param request: 用户请求相关的所有信息(对象)
:return:
"""
# return HttpResponse("你好,种花家的鄂兔")
# return HttpResponse("login.html")
# 自动找到模板路径下的login.html文件,读取内容并返回给用户
if request.method == 'GET':
return render(request, 'login.html')
else:
username = request.POST['username']
password = request.POST['password']
if username == 'wwy' and password == '123456':
return redirect('http://www.baidu.com')
else:
return render(request, 'login.html',
{'msg': '用户名或密码错误'})
urlpatterns = [
path('admin/', admin.site.urls),
path('login/', login),
]
启动项目之后,浏览器访问:http://127.0.0.1:8080/login ,会匹配到urlpatterns中path(‘login/’,login),然后执行login函数,此时的请求属于GET请求,所以会通过render函数跳转到login.html,在login.html中提交表单信息之后,会触发post请求,通过action执行相应的函数(这里我们还是执行login函数),表单的信息会通过字典形式传过来,通过request.POST获取到用户填写的信息,填写正确会通过redirect重定向到某个网址,否则还是render到login.html,通过向login.html返回错误信息msg,login.html页面通过{{msg}}即可接收。
补充:
模板语言的显示: