一、创建新项目
创建一个Django Web项目,创建完成后我们可以查看下项目的目录结构:
|-- 项目名称
| |-- init.py 一个命令行工具,可让你以各种方式与该 Django 项目进行交互。
| |-- settings.py 该 Django 项目的设置/配置。
| |-- urls.py 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。
| |-- wsgi.py 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。
|-- manage.py 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
在项目中创建一个工程,创建完成后我们可以查看下项目的目录结构:
.
|-- 项目名称
| |-- init.py
| |-- settings.py
| |-- urls.py
| |-- wsgi.py
|-- 工程名称
| |-- migrations
| |-- templates
| |-- init.py
| |-- admin.py
| |-- apps.py
| |-- models.py
| |-- tests.py
| |-- views.py
|-- manage.py
将工程名添加到setting.py的INSTALLED_APPS中
INSTALLED_APPS = [
# Add your apps here to enable them
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_web'#工程名称
]
二、配置数据库
1、数据库连接
在setting.py中作以下修改:
DATABASES = {
'default': {
#'ENGINE': 'django.db.backends.sqlite3',
#'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'ENGINE': 'django.db.backends.mysql',#使用mysql数据库进行连接
'NAME':'mysql',#数据库的名字
'USER':'root',#连接名
'PASSWORD':'root',#连接密码
'HOST':'127.0.0.1',
'PORT':'3306',
}
}
2、创建数据表
在工程目录下的models.py中添加如下代码:
class message(models.Model):
title = models.TextField()
url = models.TextField()
在数据库中创建一个名为message的数据表。
运行manger命令创建表:
manage makemigrations
manage migrate
三、添加视图文件
在view.py中添加如下代码:
这里使用的是beautifulsoup4来进行爬取数据
def search(request):
if request.method == "POST":
keyword = request.POST.get("search", None)#获取关键字
pnum = int(request.POST.get("pn", None))#获取页码,将字符串转成数字
if pnum==1:
pnum=1
else:
pnum=pnum*10
pn=str(pnum)
# 打开数据库连接
db = pymysql.connect("localhost", "root", "root", "mysql", charset='utf8' )
# 使用cursor()方法获取操作游标
cursor = db.cursor()
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36'}
url='https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd='+keyword+'&pn='+pn
res=requests.get(url=url,headers=headers)
res.encoding='utf-8'
soup=BeautifulSoup(res.text,'html.parser')
for item in soup.select('.t'):
title=item.select('a')[0].text
url=item.select('a')[0]['href']
twz = models.message.objects.create(title=title, url=url)#需要修改--已修改
twz.save()
# 关闭数据库连接
db.close()
return render(request,'search.html')
#定义展示函数
def list(request):
list = models.message.objects.all()
return render(request, 'show.html', {"list":list})
四、前台页面的编写
在templates文件夹中添加search.html和show.html
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>查询页</title>
<script>
function openResult(){ /* 绑定事件 */
var r = confirm("查询成功!")
if (r == true) {
//window.location.href="F:\MyPythonWorkSpace\pc\pc\django_web\templates\show.html"
} else {
}
}
</script>
</head>
<body>
<h3 align="center">搜索页</h3>
<form action="/search/" method="post"> {% csrf_token %}
<table align="center" style="width: 300px;height:150px">
<tr>
<td align="center">关键字:</td>
<td><input type="text" name="search" placeholder="请输入关键字"></td>
</tr>
<tr>
<td align="center">页码:</td>
<td><input type="text" name="pn" id="pnum" placeholder="请输入查询页数" onblur="check()">
<script>
function check() { /* 绑定事件 */
var num = document.getElementById("pnum").value;
if (isNaN(num)) {
alert("不是数字,请重新输入");
}
}
</script>
<span id="tishi"></span></td>
</tr>
<tr>
<td align="center" colspan="2"><input type="submit" value="搜索" onclick="openResult()"></td>
</tr>
</table>
</form>
</body>
</html>
<html>
<head>
<meta charset="UTF-8">
<title>展示页</title>
</head>
<body>
<h3 align="center">展示页</h3>
<table align="center" border="1">
<tr>
<th>i d</th>
<th>标题</th>
<th>链接</th>
</tr>
{% for line in list %}
<tr>
<td>{{line.id}}</td>
<td>{{line.title}}</td>
<td>{{line.url}}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
五、URL声明
在url.py中添加如下代码:
"""
Definition of urls for pc.
"""
from django.conf.urls import include, url
from django.contrib import admin
from django_web import views
urlpatterns = [
url(r'^search/$',views.search),
url(r'^show/$',views.list),
url(r'^admin/', admin.site.urls),
]
六、运行项目
七、编写中出现的问题
1、主页显示问题
运行项目会出现下面的页面,需要手动在网址后面输入"/search.html"或"/show.html"进行访问。
解决方法:
1.在views中添加一个显示主页的函数
def homepage(request):
response=render(request,“search.html”);
return response2.在urls.py中添加
url(r’^$’,views.homepage),
2、数据库的使用
好像python3.7以前使用mysqldb,以后使用pymysql,我在pip安装mysqldb的时候就提示错误,pip install pymysql就可以。
如果要使用pymysql,则需要进行配置:在__init__.py中添加如下代码来替换mysqldb:
import pymysql
pymysql.install_as_MySQLdb()