赞
踩
创建一个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'#工程名称
]
在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',
}
}
在工程目录下的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.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),
]
运行项目会出现下面的页面,需要手动在网址后面输入"/search.html"或"/show.html"进行访问。
解决方法:
1.在views中添加一个显示主页的函数
def homepage(request):
response=render(request,“search.html”);
return response2.在urls.py中添加
url(r’^$’,views.homepage),
好像python3.7以前使用mysqldb,以后使用pymysql,我在pip安装mysqldb的时候就提示错误,pip install pymysql就可以。
如果要使用pymysql,则需要进行配置:在__init__.py中添加如下代码来替换mysqldb:
import pymysql
pymysql.install_as_MySQLdb()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。