首先需要安装python和pycharm,python这里安装的是3.7最新版,pycharm不要使用免费版,因为它不支持Django。
安装Django
这里只介绍较为简单的pip3命令安装方式。
win+r,调出cmd,运行命令:pip3 install django,自动安装Django提供的最新版本。
安装完成后:
运行:django-admin help,查看是否安装成功,能看到下面的内容表示OK。
创建Django项目:
点击:file–>new project,出现下面的对话框。
django项目目录:
创建APP
在每个django项目中可以包含多个APP,相当于一个大型项目中的分系统、子模块、功能部件等等,相互之间比较独立,但也有联系。
所有的APP共享项目资源。
在pycharm下方的terminal终端中输入命令:
python manage.py startapp myAPP
这样就创建了一个叫做myAPP的APP,django自动生成“myAPP夹。
编写路由:
路由都在urls文件里,它将浏览器输入的url映射到相应的业务处理逻辑。
简单的urls编写方法如下图:
#需要先导入对应的app的views文件
from myAPP import views
urlpatterns = [
#admin后台的路由,先注释
#path('admin/', admin.site.urls),
#自定义的路由
path("index/", views.index),
]
将index这个url指向了views里的index()函数
编写业务处理逻辑
业务处理逻辑都在新建的app文件夹中的views.py文件里。
from django.shortcuts import HttpResponse
# Create your views here.
#request参数必须有,名字是类似self的默认规则
def index(request):
#不能直接返回字符串,必须是由HttpResponse类封装掐你的,这是django规则,不是python
return HttpResponse("Hello World")
运行django项目:
在pycharm上部工具栏中找到下面图示的图标。
点击edit configurations
在host中填入:127.0.0.1 port中填入:8000
OK确定之后,点击绿色的三角,web服务就运行起来了。
在浏览器访问程序界面。显示的却是下图的404页面:
修改一下url,添加“/index”,就一切ok了!
返回HTML文件
先在templates文件夹中新建一个HTML文件
再修改一下views文件:
#request参数必须有,名字是类似self的默认规则
def index(request):
#不能直接返回字符串,必须是由HttpResponse类封装掐你的,这是django规则,不是python
#return HttpResponse("Hello World")
"""
当你想返回一个HTML文件时,就要用render方法来渲染
render是django提供的方法和规则,
:param request:
:return:
"""
return render(request, "index.html",)
现在重新启动一下项目,就可以访问HTML文件了
接收用户发送的数据
上面,我们将一个要素齐全的html文件返还给了用户浏览器。但这还不够,因为web服务器和用户之间没有动态交互。
下面我们设计一个表单,让用户输入用户名和密码,提交给index这个url,服务器将接收到这些数据。
先修改index.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>第一个Django项目</title>
</head>
<body>
<h1>hello World</h1>
<h2>用户输入</h2>
<form action="/index/" method="post">
<input type="text" name="username" />
<input type="password" name="password" />
<input type="submit" value="提交">
</form>
</body>
</html>
然后修改views.py文件,输出接收到的数据
if request.method == "POST":
username = request.POST.get("username", None)
password = request.POST.get("password", None)
print(username, password)
此时 ,重启web服务时,会出错,因为django有一个跨站请求保护机制,我们在settings文件中将它关闭。
在页面输入数据,之后点击提交,后台接收输出
将数据存储到数据库中,以便保存
使用数据库是毫无疑问的,django通过自带的ORM框架操作数据库,并且自带轻量级的sqlite3数据库。下面我们来看一看:
首先是注册app:
不注册它,你的数据库就不知道该给哪个app创建表。
然后我们在settings中,配置数据库相关的参数,如果使用自带的sqlite,不需要修改。
再编辑models.py文件
from django.db import models
# Create your models here.
#需要基础Model类,固定写法
class UserInfo(models.Model):
#创建两个字段最大长度为32,类型是char
user = models.CharField(max_length=32)
pwd = models.CharField(max_length=32)
这里我们创建了2个字段,分别保存用户的名字和密码。
接下来要在pycharm的teminal中通过命令创建数据库的表了。有2条命令,分别是:
python manage.py makemigrations
再输入命令:python manage.py migrate
修改views.py中的业务逻辑
from django.shortcuts import render
from django.shortcuts import HttpResponse
from myAPP import models
# Create your views here.
#request参数必须有,名字是类似self的默认规则
def index(request):
if request.method == "POST":
username = request.POST.get("username", None)
password = request.POST.get("password", None)
#print(username, password)
#把数据添加到数据库中
models.UserInfo.objects.create(user=username, pwd = password)
#从数据库中读取所有的数据
user_list = models.UserInfo.objects.all()
#不能直接返回字符串,必须是由HttpResponse类封装掐你的,这是django规则,不是python
#return HttpResponse("Hello World")
"""
当你想返回一个HTML文件时,就要用render方法来渲染
render是django提供的方法和规则,
:param request:
:return:
"""
return render(request, "index.html", {"data": user_list})
修改index页面,把数据库数据显示出来
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>第一个Django项目</title>
</head>
<body>
<h1>hello World</h1>
<h2>用户输入</h2>
<form action="/index/" method="post">
<input type="text" name="username" />
<input type="password" name="password" />
<input type="submit" value="提交">
</form>
<hr>
<h1>数据显示</h1>
<table border="1">
<thead>
<th>用户名</th>
<th>密码</th>
</thead>
<tbody>
{# 循环遍历数据,data为views中传递过来的第三个参数中的key#}
{% for line in data %}
<tr>
<td>{{ line.user }}</td>
<td>{{ line.pwd }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>
页面效果:
引用静态文件:
我们已经可以将html文件返还给用户了,但是还不够,前端三大块,html、css、js还有各种插件,它们齐全才是一个完整
的页面。在django中,一般将静态文件放在static目录中。接下来,在项目中新建个static目录。
你的CSS,JS和各种插件都可以放置在这个目录里。
为了让django找到这个目录,依然需要对settings进行配置:
STATICFILES_DIRS=(
os.path.join(BASE_DIR, 'static'),
)
页面引用
访问状态为200则引用成功,也可以到浏览器中看