使用Pycharm图形化界面创建
这里推荐使用Pycharm,它功能强大,界面友好。
1,点击:file——》new project,出现下面的对话框。
选择Django栏目,输入项目名称,这里采用国际惯例的mysite。选择Python解释器版本,点击create创建。
2,Django将自动生成下面的目录结构:
与项目同名的目录中是配置文件,
各文件和目录解释:
外层的mysite目录与Django无关,只是你项目的容器,可以任意命名。
manage.py:一个命令行工具,用于与Django进行不同方式的交互脚本,非常重要,也是Django的管理主程序。
内层的mysite/ 目录是真正的项目文件包裹目录,他的名字是你引用内部文件的包明,例如:mysite.urls。
mysite/init.py : 一个定义包的空文件。
mysite/settings.py : 项目的主配置文件
mysite/urls.py : 路由文件,所有的任务都是从这里开始分配,相当于Django驱动站点的内容表格。
mysite.wsgi.py : 一个基于WSGI的web服务器进入点,提供底层的网络通信功能(通常不用关心)
django目录结构
使用terminal终端创建
进入指定的项目保存目录,然后运行下面的命令:
pip3 install django
django-admin startproject webtest3
这样就在目录下面生成一个webtest3目录,也就是我们的Django项目的根目录。它包含了一系列自动生成的目录和文件,具备各自专有的用途。
APP应用和project项目的区别
一个APP实现某个功能,比如博客,公共档案数据库或者见到的投票系统
一个project是配置文件和多个APP的集合,这里APP组合成整个站点
一个project可以包含多个APP
一个APP可以属于多个project
所有的APP共享项目资源。
APP的存放位置可以是任何地点,但是通常都将他们放在与manage.py脚本同级的目录下,这样方便导入文件。
在pycharm下面的terminal终端中输入命令(pycharm中没有可以创建APP的图形化按钮,需要在终端中输入命令):
python manage.py startapp aaa
python manage.py startapp polls
这样就创建了一个叫做aaa和polls的APP,Django自动生成“aaa” 与 polls文件夹
目录
运行web服务
方法一:命令行的运行方式为:
python manage.py runserver 127.0.0.1:8000
方法二:运行Edit Configurations
OK之后,点击绿色的三角,web服务就运行起来了
运行成功提示
MVT模型与MVC模型
MVT中 Model 是一样的 V view 相当于 mvc中的 control T template 与mvc中的 view一样
所以对应关系为 MVC------>MTV
实现登录功能
一.配置静态文件存放js css img 等
新建static文件夹,更改set中静态文件位置
创建静态文件目录
修改配置文件静态文件目录路径
二.配置url
其中如果涉及反向解析,需要设置namespace name appname
主url
子url
四.反向生成数据库表
在model中将设计好的数据库表进行创建,生成 迁移文件 再生成数据库表
pip3 install mysqlclient
需要在setting中注册对应的app
注册app
修改数据库配置 这里使用mysql
数据库配置
设计表中的属性
我们要在pycharm的teminal中通过命令创建数据库的表,有两条命令,分别是:
python manage.py makemigrations
通过运行makemigrations命令,相当于告诉Django你对模型有改动,并且你想把这些改动保存为一个“迁移(migration)”。
migrations是Django保存模型修改记录的文件,这些文件保存在磁盘上。在例子中,它就是cmdb/migrations/0001_initial.py,你可以打开它看看,里面保存的都是人类可读并且可编辑的内容,方便你随时手动修改。
生成的迁移文件在团队开发时可以上传svn或github
再输入命令:
Python manage.py migrate
将操作同步到数据库。
image.png
三.设计MVT
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="/staticaa/js/jquery-1.11.0.min.js"></script>
<script>
$(function(){
alert("jquery has loaded !")
})
</script>
</head>
<body>
<form action="../cmdb/check" method="post">
{% csrf_token %}
<input type="text" name="username">
<input type="password" name="password">
<input type="submit"> <br>
<input type="button" value="注册" onclick="JavaScript :location.href='../cmdb/register'">
</form>
{% for n in userlist %}
<h1>{{ n.user }}</h1>
<h1>{{ n.pwd }}</h1>
{% endfor %}
</body>
</html>
main.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
welcome {{ username}} <br>
this is the main page
{% for n in userinfo %}
<h1> {{ n }}</h1>
{% endfor %}
{% for n in iteminfo %}
<h2> {{ n.name }}</h2>
<h2> {{ n.price }}</h2>
<h2> {{ n.info }}</h2>
{% endfor %}
</body>
</html>
设计views
def index(request):
# return HttpResponse("hello!")
return render(request,"login.html")
def check(request):
username= request.POST.get("username",None)
password= request.POST.get("password", None)
print("check:"+username+password)
# get()
# 方法:有且只有一个查询结果时才有意义;如果有多个查询结果或者没有查询结果,报错;所以,返回值:model对象
couldlogin=False
try:
models.Userinfo.objects.get(user=username,pwd=password)
couldlogin=True
except Exception as ex:
print(ex)
print("查无此用户")
if couldlogin:
#返回复杂类型
return render(request,"main.html",{"username":username,"userinfo":["tom",19,"man"],"iteminfo":[{"name":"华为手机","price":3000,"info":"华为也能照亮你的美"},{"name":"华为手机2","price":3000,"info":"华为也能照亮你的美"}]})
else:
return redirect("/cmdb/login")
url
path("login", views.index),
path("check", views.check),
登录页面
登陆成功
网友评论