Home >  > 风站开发(五)天气网开发

风站开发(五)天气网开发

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后台查看。
然后在后台添加数据库就可以了。

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

这个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 %}

十、关于静态文件
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}),

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

参考:
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

本文暂无标签

发表评论

*

*