经过了安装和部署操作后,我们在127.0.0.1:8000/admin
的登录界面输入账号和密码,发现此时需要账号和密码才能进入。
解决方案:创建一个超级管理员的账号 python manage.py createsuperuser
邮箱格式符合即可
接着在输入界面,输入刚刚创建的账号和密码,之后就可以成功登陆。
以下界面就是django
的后台管理界面。
理论流程
如何创建自己的页面呢?
终端输入: python manage.py startapp polls
执行命令后相应新建polls
应用文件,同时也会新增默认的py
文件。
在url输入127.0.0.1:8000/polls/
在mydemo
项目里的settings.py
中全局搜索APP
,增加配置'polls'
路由
URLs
得到浏览器请求的url
后,对照路由表,然后分配到子路由或者转到功能函数,可以认为它是个导航系统。
配置路由
- 从之前的目录解释中,我们可以知道
项目
orapp应用
路由信息保存在相对应的urls.py
文件中。 - 主路由:项目对应的
urls.py
,所有的 url 都先发到这里来做对照,再分发给对应的子路由,也就是每个应用的路由。 - 在我们的项目中,主路由为
mydemo/urls.py
,子路由为polls/urls.py
。
配置主路由mydemo.urls.py
观察思考,下面代码对应的是admin
页面的路由配置,那么我们要怎么在urlpatterns
路由表中添加新的子路由
来对新建页面进行展示呢?
原主路由配置
from django.contrib import admin
from django.urls import path
urlpatterns = [ path('admin/', admin.site.urls), ] # path()用于匹配路由
模仿主路由配置进行添加修改,逻辑上是这样 But... [admin是自带的]
from django.contrib import admin
from django.urls import path
urlpatterns = [ path('admin/', admin.site.urls), path('polls/', polls.urls), ]
# 配置有配置的要求
from django.contrib import admin
from django.urls import path
from django.urls import include # 需要通过导入include来分发路由
urlpatterns = [
path('admin/', admin.site.urls),
path('polls/', include('polls.urls')), # include()用来分发个子路由,参数是子路由的文件名,这里是字符串传输,555
]
子路由 polls.urls.py
- 创建
polls.urls.py
- 用
app_name = 'polls'
来设置命名空间,避免和其他应用的同名 url 混淆 - 编写路由表:
path()
负责绑定业务功能
在自建的路由文件,导入path来匹配url
from django.urls import path # 导入当前目录下的views
from . import views # 确定命名空间
app_name = 'polls' # 子路由表
urlpatterns = [
path('', views.Login_view, name ='Login_view'), # path()负责绑定业务功能
]
视图
polls下创建view
- 一个视图函数(类),简称视图,是一个简单的
Python
函数(类),它接受Web
请求并且返回Web
响应。这里的响应可以是一张网页的HTML
内容,一个重定向,一个404错误,一个XML
文档,或者一张图片。 - 无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓,只要它在你当前项目目录下面。除此之外没有更多的要求了——可以说“没有什么神奇的地方”。为了将代码放在某处,大家约定成俗将视图放置在
项目(project)
或应用程序(app)
目录中的名为views.py
的文件中。
创建视图
from django.shortcuts import render
# Create your views here
# 进入登录界面
def Login_view(request):
return render(request,'Login.html')
这时,就差最后一步,展示工作啦!
创建配置模板和html
首先我们先查看一下mydemo
项目里的settings.py
全局搜索 TEMPLATES
# 未修改
'DIRS': [], # 这里通过配置路径进行创建和使用
# 进行配置
'DIRS': [os.path.join(BASE_DIR, 'templates')], # 通过字符串的拼接BASE_DIR表示项目所在目录+'目标文件名'配置目标路径
在polls
下新建templates
文件夹_(用于存放以后写的页面)_
在templates
新建Login.html
(解决对应前面页面不存在的问题)
简单的写下页面。能看到页面,说明配置成功啦。
模型
这里因为想实战数据库,写一个简单的交互页面Login.html
(用户输入数据,我们进行存储)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户登录</title>
</head>
<body>
<form action="/polls/main" method="get">
<p><label>用户名:</label><input name="user"/></p>
<p><label>密码:</label><input name="pwd"/></p>
<input type="submit" value="提交"/>
</form>
</body>
</html>
提出功能:点击提交后获取用户输入的用户名和密码,去比对数据库表中的用户名和密码,将返回结果返回在新页面上。
一步步来
1.跳转到新页面polls/index/
注意:要加index后要加斜杠!
<form action="/polls/index/" method="get">
2.配置子路由
在子路由表(polls.urls
) 增加子路由:
path('index/', views.toLogin_view, name='toLogin_view'),
在视图(polls.views
) 增加功能:
# 进入判断是否登录陈宫界面
def toLogin_view(request):
# 获取账号密码
u = request.GET.get('user', '')
p = request.GET.get('pwd', '')
if u == p:
return HttpResponse('登录成功')
else:
return HttpResponse('登录失败')
启动服务,查看一下页面。
# 细化指定root用户登录
u=="root" and p=="123"
3.区别GET and POST
修改为POST
:
Login.html : <form action="/polls/index/" method="post">
polls/views :
u = request.POST.get('user', '')
p = request.POST.get('pwd', '')
问题:django
自带的安全机制。解决:增加标签在login.html
的form.. method
后:
{% csrf_token %}
说明:在setting.py
全局搜csrf
。第一种解决方案↑,也可以直接注释setting
的那一行。
4.连接数据库
目的:在数据库中创建表,映射(自动生成)在model.py
的数据模型
创建表名为:Logintable
属性字段为user pwd
(都不能为空)
创建完成之后,在终端输入python manage.py inspectdb>polls/models.py
解释:将数据库内的表映射到polls/models.py
(项目名称/数据模型),执行后再看model.py
发现就不是空的啦,之后我们查看一下我们刚刚创建的Logintable
在model
中的描述。
这里要记得是objects
有s!!
先做验证数据库中是否有用户数据(之前需要进行数据填充root,123)
view.py
:
if u and p:
c = Logintable.objects.filter(user= u, pwd= p).count()
if c >=1:
return HttpResponse('登录成功')
else:
return HttpResponse('登录失败')
else:
return HttpResponse('重新输入')
Logintable.objects.filter()对数据进行查询,filter查询多个数据 .get是查询某一个数据。
对记录进行存储到数据库中(navicat
查看的时候右键刷新),以下两种写法都可以。
if u and p:
c = Logintable(user= u,pwd= p)
c.save()
return HttpResponse('已导入数据库')
else:
return HttpResponse('重新输入')
if u and p:
c = Logintable()
c.user = u
c.pwd = p
c.save()
return HttpResponse('已导入数据库')
else:
return HttpResponse('重新输入')
读入数据,并存储在数据库当中啦。右击表进行刷新,对应刷新表的内容。