我的简书:https://www.jianshu.com/u/c91e642c4d90
我的CSDN:http://blog.csdn.net/wo_ha
我的GitHub:https://github.com/chuanqiLjp
我的个人博客:https://chuanqiljp.github.io/
版权声明:商业转载请联系我获得授权,非商业转载请在醒目位置注明出处。
安装Python的环境
到Python官网下载,然后就是正常的软件安装,安装时记得勾选 Add Python 3.6 to PATH。在cmd中输入python
显示了安装的版本号则表示安装成功,我的版本号为 3.7.1,
安装Python集成开发环境Pycharm
- 到Pycharm的官网下载Professional专业版并安装
- 激活,打开路径
C:\Windows\System32\drivers\etc
,修改host文件,在末尾追加域名0.0.0.0 account.jetbrains.com
,访问lanyus地址:http://idea.lanyus.com/ 点击获得注册码,打开Pycharm选中Activation code 将注册码复制进去就可以了激活,参考文章: https://blog.csdn.net/justszh/article/details/81484802
使用Pycharm创建Django工程
本文以下部分参考Django2.1新手图文入门教程
环境: windows7,Pycharm2018.3.3(必须专业版),Python3.7.1,Django2.1.5
-
Create New Project ---> Django --->填写项目名称--->create 如下图所示
使用Pycharm创建Django工程1
工程的目录结构
FirstWeb:.
│ manage.py //django管理的主程序
│
├─FirstWeb
│ settings.py//主配置文件
│ urls.py //URL路由文件
│ wsgi.py // 网络通信接口
│ __init__.py
│
└─templates // html 文件们的归置目录
│
├─venv // 虚拟环境
创建APP模块
在pycharm下方的terminal终端中输入命令:python manage.py startapp cmdb
,此时会在工程根目录下创建cmdb模块,其目录结构如下
FirstWeb:.
└─FirstWeb
└─venv
└─....省略
└─cmdb
│ admin.py
│ apps.py
│ models.py
│ tests.py
│ views.py
│ __init__.py
│
└─migrations
__init__.py
现在的目录结构如图
使用Pycharm创建Django工程2
在settings.py文件内修改
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'cmdb', # 新增模块的名称
]
# LANGUAGE_CODE = 'en-us' #英文环境
LANGUAGE_CODE = 'zh-hans' # 修改为中文
在cmdb模块下的views.py编写URL的处理逻辑
from django.shortcuts import HttpResponse # 导入HTTP响应类
def helloDjango(request): # request参数必须有,类似self的默认规则,名字可以修改.他封装了用户请求的所有内容
return HttpResponse("Hello Diango world ~~~~~ ") #在django的响应中不能直接返回字符串,需由HttpResponse封装
注册URL到urls.py路由文件中
from cmdb import views # 先导入cmdb模块的views文件
urlpatterns = [
path('admin/', admin.site.urls),
path(r'hello', views.helloDjango),#注册一个新的url,参数1表示url的名称,参数2表示执行的业务逻辑的函数
]
通过上面两个步骤,我们将hello这个url指向了views里的helloDjango()函数,它接收用户请求,并返回一个“hello ...”字符串。至此,一个最简单的Django程序就写好了,此时运行一下如果没有报错就可以在浏览器打开链接http://127.0.0.1:8000/hello
看到输出的字符串了,如下图
返回一个Html文件
1.在templates文件夹下创建index.html文件并编写如下内容
<html>
<head>
<title>文档标题</title>
</head>
<body>
文档内容......
</body>
</html>
- 在views.py中编写业务逻辑
def indexHtml(request):
"""
返回一个HTML文件,当想渲染一个html文件时,需要使用render方法进行打包
"""
return render(request, "index.html") # 参数1固定,参数2:指定返回的html文件
- 在urls.py注册url地址
path(r'index/',views.indexHtml),#url名称若为文件需要在末尾加斜杠,该url的业务逻辑为views.indexHtml函数
path(r'', views.indexHtml), # 默认的主页
其实在settings.py的TEMPLATES字典的DIRS字段中指明了html文件存放的目录,可以修改,一般默认就行了
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')]
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
使用静态文件(待验证)
我们已经可以将html文件返还给用户了,但是还不够,前端三大块,html、css、js还有各种插件,它们齐全才是一个完整的页面。在django中,一般将静态文件放在static目录中。接下来,在mysite中新建个static目录。
picture1
你的CSS,JS和各种插件都可以放置在这个目录里。
为了让django找到这个目录,依然需要对settings进行配置:
picture2
同样,在index.html文件中,可以引入js文件了:
picture3重新启动web服务,刷新浏览器,查看结果。
接收用户发送的数据
上面,我们将一个要素齐全的html文件返还给了用户浏览器。但这还不够,因为web服务器和用户之间没有动态交互。下面我们设计一个表单,让用户输入用户名和密码,提交给index这个url,服务器将接收到这些数据。
- 先修改index.html文件,注意action属性不要写错
<html>
<head>
<title>
文档标题
</title>
</head>
<body>
文档内容......
<h1>
用户输入
</h1>
<form action="/index/" method="post">
<input type="text" placeholder="请输入您的用户名" name="userName" />
<input type="password" placeholder="请输入您的密码" name="userPwd" />
<input type="submit" value="提交" />
</form>
</body>
</html>
- 修改views.py
def indexHtml(request):
"""
返回一个HTML文件,当想渲染一个html文件时,需要使用render方法进行打包
"""
if request.method == "POST":
name = request.POST.get("userName", None)
pwd = request.POST.get("userPwd", None)
print("name={0},pwd={1}".format(name, pwd))
return render(request, "index.html") # 参数1固定,参数2:指定返回的html文件
- 关闭跨域保护,修改settings.py
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',
]
返回动态页面
收到了用户的数据,但返回给用户的依然是个静态页面,通常我们会根据用户的数据,进行处理后在返回给用户。这时候,django采用jinja2语言编写动态模板,jinja2会根据提供的数据,替换掉html中的相应部分.
- 先改造views.py文件:
# 创建一个用户列表,预先存储两个数据
user_list = [{"user": "tom", "pwd": "123456"},
{"user": "bob", "pwd": "147258"},
]
def indexHtml(request):
"""
返回一个HTML文件,当想渲染一个html文件时,需要使用render方法进行打包
"""
if request.method == "POST":
name = request.POST.get("userName", None)
pwd = request.POST.get("userPwd", None)
print("name={0},pwd={1}".format(name, pwd))
tem = {"user": name, "pwd": pwd}
user_list.append(tem)
return render(request, "index.html",{"data": user_list}) # 参数1固定,参数2:指定返回的html文件,参数3是后台返回给浏览器的数据是一个字典,"data"键名为一个指针会被对应到html中使用
- 再改造index.html文件:
<html>
<head>
<title>
文档标题
</title>
</head>
<body>
文档内容......
<h1>
用户输入
</h1>
<form action="/index/" method="post">
<input type="text" placeholder="请输入您的用户名" name="userName" />
<input type="password" placeholder="请输入您的密码" name="userPwd" />
<input type="submit" value="提交" />
</form>
<h1>
用户已输入的数据展示
</h1>
<table border="1">
<thead>
<th>
用户名
</th>
<th>
密码
</th>
</thead>
<tbody>
{# 注释: jinja2的语法,下面表示一个for循环,data是views的indexHtml函数传递过来的key值 ,在jinja2中,存在三种语法: 控制结构 {% %},变量取值 {{ }},注释 {# #} #}
{% for line in data %}
<tr>
<td>
{{ line.user }}
</td>
<td>
{{ line.pwd }}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>
picture5
使用数据库
上面我们虽然和用户交互得很好,但并没有保存任何数据,页面一旦关闭,或服务器重启,一切都将回到原始状态。使用数据库是毫无疑问的,django通过自带的ORM框架操作数据库,并且自带轻量级的sqlite3数据库。下面我们来看一看:
- 首先是注册app,修改settings.py,注册它,你的数据库就不知道该给哪个app创建表。然后我们在settings中,配置数据库相关的参数,如果使用自带的sqlite,不需要修改。使用MySQL请参考:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'cmdb',# 注册新的模块
]
# 默认无需修改
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
- 再编辑models.py文件,也就是MTV中的M。
#只要修改了整个文件,需要执行cmd命令"python manage.py makemigrations"和"python manage.py migrate"去修改sql文件
class UserInfo(models.Model):#该类必须继承models.Model类
username = models.CharField(max_length=32, default=None)# 创建一个字段,长度为32个字符
password = models.CharField(max_length=32, default=None)
接下来要在pycharm的teminal中通过命令创建数据库的表了。有2条命令,分别是:python manage.py makemigrations
再输入命令:python manage.py migrate
还可以 创建数据库超级用户,在控制台执行以下命令python manage.py createsuperuser
,这里创建后可在url为admin下去登录后台(Django的默认管理后台),此外还注册数据库里的表格,在模块目录下的admin.py文件里注册
from .models import UserInfo
admin.site.register(UserInfo)
- 修改views.py中的业务逻辑
from cmdb import models
def indexHtml(request):
"""
返回一个HTML文件,当想渲染一个html文件时,需要使用render方法进行打包
"""
if request.method == "POST":
name = request.POST.get("userName", None)
pwd = request.POST.get("userPwd", None)
print("name={0},pwd={1}".format(name, pwd))
models.UserInfo.objects.create(username=name, password=pwd) # 添加数据到数据库
users = models.UserInfo.objects.all() # 从数据库中读取所有行
# 若UserInfo中的字段名和html中使用的字段名对应可省略下面的转换操作
user_list = []
for user in users:#遍历从数据库中取出的数据转换为待展示的字典格式
tem = {"user": user.username, "pwd": user.password}
user_list.append(tem)
print(user_list)
return render(request, "index.html",{"data": user_list}) # 参数1固定,参数2:指定返回的html文件,参数3是后台返回给浏览器的数据是一个字典,"data"键名为一个指针会被对应到html中使用
本文参考:
网友评论