Home >  > 网站开发(五)天气网开发Django2.0

网站开发(五)天气网开发Django2.0

0

开发环境:
django2.0
python 3.6.5

一、搭建环境:
这个就不说了,直接按这里的来就行了。d8af4。

二、模板
1.路径问题
将模板复制过来后,样式全乱了,因为CSS的路径不对。
将static文件夹移到你的app根目录下面(不是项目根目录下)。
然后按这里的方法修改静态文件路径就可以了。

2.URL配置
这里又有一个坑,因为django2.0的URL配置与之前的版本不一样了。

from django.contrib import admin
from django.urls import path,include

urlpatterns = [	
    path('', include('weather.urls')),
    path('admin/', admin.site.urls),    
]

然后app下面的URL配置:

from django.urls import path
from . import views

urlpatterns = [
    path('',views.index),
    path('weather/',views.city_detail),
]

到了这一步,网站的前端框架基本上搭建好了。

三、数据库
没多少数据直接使用SQlite。
不过打开数据库浏览软件,看不到sqlite里面的字段。
倒是可以通过admin后台查看。
然后在后台添加数据库就可以了。
如果要查看SQLite数据库,可以用sqlite spy

四、前台显示数据
五、后台显示字段

这个django 2.0又和以前不一样了,现在有这种写法了:

@admin.register(weather)
class CategoryAdmin(admin.ModelAdmin):
    list_display = ['resortid', 'name','tmp_max','tmp_max']

六、获取URL中的参数
django2.0在这方面进步了很多,不用写re_path也可以了。
只需要在URL中配置

    path('weather/<resortid>/',views.city_detail),

然后在view那里取参数就可以了,真的好简单。

def city_detail(request,resortid):
	weather_details = weather.objects.filter(resortid = resortid)
	return render(request,'weather/weather.html',{'weather_details':weather_details})

如果要获取别名,则用:

    path('<slug>/<resortid>/hours/',views.hourly),
def hourly(request,slug,resortid):

七、集成hicharts
其实非常简单,首先在https://www.highcharts.com/上面下载代码,然后将代码加入到模板文件中。需要留意的是下载回来的文件除了html,还有一个JS文件,这个JS文件可以直接放到你的模板文件中就可以了。
然后可以看到JS文件那里,接收的数据是一个列表,所以只需要在django的后端传一个列表过来,就可以正常显示了。

后台代码:

def weather_detail(request,slug,resortid):	
	dayly_lists = list()
	dayly_details = HoursForecast.objects.values('tmp')
	for entry in dayly_details:
		dayly_lists.append(entry['tmp'])
	return render(request,'weather/weather.html',{'weather_details':weather_details,'dayly_lists':dayly_lists})

前端代码:

    data: {{dayly_lists}}

成果展示:

如果要传送字典的话,则可以看这里

八、新学到的知识:
1.Blog.objects.values

2.get_absolute_url
(1)首先在model中定义:

	# 自定义 get_absolute_url 方法
	def get_absolute_url(self):
		return reverse('weather:weather_detail', kwargs={'slug': self.slug})

其中中的weather代表App的名称,current代表视图函数,后面的参数代表获取原来url配置中的slug。

urlpatterns = [
    path('',views.index),
    path('<slug>/<resortid>/',views.weather_detail),

然后在前端调用就可以看到效果了:

<a href="{{ post.get_absolute_url }}">{{ w.name }}</a>

可以看这里:https://www.jianshu.com/p/94fbf80bdfb3

九、使用SEO URL
用上面的方法没有成功,我直接用自己的方法吧:
直接将数据传到列表页,然后在列表页拼接URL:

{% for x in weather_detail %}
<a href="/{{ x.slug }}/{{ x.resortid }}">{{ x.name }}</a>
{% endfor %}

十、上一篇、下一篇

def blog_detail(request,blog_pk):
    context = {}
    blog = get_object_or_404(blog,pk=blog_pk)
    context['previous_blog'] = Blog.objects.filter(created_time__gt=blog.created_time).last()
    context['next_blog'] = Blog.objects.filter(created_time__lt=blog.created_time).first()
    context['blog'] = blog
    return render_to_response('blog/blog_detail.html',context)

模板中调用

<div class = "blog-more">
	<p>上一篇:
		{% if previous_blog %}
		    <a href="{% url 'blog_detail' previous_blog.pk %}">{{previous_blog.title}}</a>
		{% else %}
			没有了
		{% endif %}	
	</p>
	<p>下一篇:
		{% if next_blog %}
		    <a href="{% url 'blog_detail' next_blog.pk %}">{{next_blog.title}}</a>
		{% else %}
			没有了
		{% endif %}	
	</p>
</div>

筛选

十一关于静态文件
django的静态文件搞得很复杂,本地配置一次,然后部署上线的时候又要配置一次。今天又学习了一下:

django静态文件放在对应的 app 下的 static 文件夹中 或者 settings.py文件的STATICFILES_DIRS 设定的的文件夹中。
当 DEBUG = True 时,Django 就能自动找到放在里面的静态文件。(Django 通过 STATICFILES_FINDERS 中的“查找器”,找到符合的就停下来,寻找的过程 类似于 Python 中使用 import xxx 时,找 xxx 这个包的过程)。

打开开发服务器 python manage.py runserver 直接访问 /static/zqxt.png 就可以找到这个静态文件。

部署时的收集静态文件:

会把以前放在app下static中的静态文件全部拷贝到 settings.py 中设置的 STATIC_ROOT 文件夹中。

不过当DEBUG为False时,意味着你要进入生产环境,那么,你就必须使用STATIC_ROOT来指明你的静态文件在哪里,就像MEDIA_ROOT一样。

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static")
]
STATIC_ROOT = os.path.join(BASE_DIR, "static")

在setting.py文件中添加上面代码(其实前两句默认settings.py已经有了,只需要加最后一句),并且在urls.py中添加下面代码即可。

url(r'^static/(?P<path>.*)$', serve, {'document_root': STATIC_ROOT}),

十一、进度
上周六开始做这个网站,到这周六,基本上完成了网站设计、数据入库。
还差一些网站链接、文字、图片的修改以及上线。

十二、图片
利用采集百度图片脚本,采集到了相关图片,但是图片的命令是"heilongjiang-qiqihaer\xxxx.jpg"这样的形式,所以需要将图片命令为heilongjiang-qiqihaer-1.jpg这样的形式。

在这个过程中,发现即使使用heilongjiang-qiqihaer这样的形式来命令文件夹,还是存在同名的情况,比如云南有彝良、宜良,他们的拼音是一样的。所以,我采集图片的时候只看到有3217个文件夹,经过上面的重命令,结果出来了3238张图片,这也和excel文件中的3240个城市接近了。

参考:
https://www.localconditions.com/weather-new-york-new-york/10001/forecast.php
index:https://weatherspark.com/

评论模块:
https://github.com/HonzaKral/django-threadedcomments

分页:
https://blog.51cto.com/13803166/2298581?source=dra

显示地图:
https://github.com/bashu/django-easy-maps

django:
http://www.conyli.cc/chapter07.html

很好的参考:
https://www.cnblogs.com/pycode/p/db-middleware.html

本文暂无标签

发表评论

*

*