您好,登錄后才能下訂單哦!
本篇內容主要講解“python+django+mysql開發實例分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“python+django+mysql開發實例分析”吧!
開發工具:pycharm
環境:python3.7.4(例子中用的3.6)
下載安裝pycharm
分為社區版和專業版,一個免費一個收費
Pycharm2021破解版下載
下載安裝python
安裝好開發工具和python環境后,打開pycharm,配置python環境以及升級pip,由于低版本pip影響新版本組件的安裝因此建議升級到最新版本的pip。
配置好python環境后
安裝中的狀態
安裝成功提示如下
成功后等待一會工具處理插件,處理成功后就可以用新版本的pip了
同樣的方法安裝django,pymysql
需要注意的是,各個插件版本的依賴關系,安裝你的python版本支持的django和pymysql
右鍵你的項目,打開終端
輸入如下內容
#創建一個項目,名稱為blogs django-admin.exe startproject blogs #進入項目目錄 cd blogs #創建一個應用,注應用名稱不能與項目名稱相同 python manage.py startapp blog
Pycharm 設置路徑
兩個都勾選上,然后右鍵目錄,加入目錄的路徑,引用模塊的時候就不會報錯
項目創建好后,目錄結構如下
1.添加url路由
在urls.py文件中,編寫如下代碼:
from django.contrib import admin from django.urls import path from blog.views import * urlpatterns = [ path('admin/', admin.site.urls), path('', indexes), path('blog/', index), path('start/', start_scrapy), ]
2.Settings.py中添加應用配置
import pymysql #引用mysql驅動 pymysql.install_as_MySQLdb() ALLOWED_HOSTS = ["*"]#允許全部主機訪問 # Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'blog',#添加創建的應用模塊 'bootstrap3',#如果需要使用bootstrap框架,需要安裝django-bootstrap3插件 ] DATABASES = {#配置數據庫鏈接屬性 # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # } 'default': { 'ENGINE': 'django.db.backends.mysql', # 或者使用 mysql.connector.django 'NAME': 'blog', 'USER': 'root', 'PASSWORD': '@bjive321', 'HOST': '59.110.138.8', 'PORT': '3306', } }
3.編寫models
from django.db import models # Create your models here. class Blog(models.Model): title = models.CharField(u'標題', max_length=64) content = models.TextField(u'內容', default="") update_time = models.DateTimeField(u'更新時間', auto_now=True) pub_date = models.DateField(u'發布時間') author = models.CharField(u'作者', max_length=64, default=None) # update_time.editable = True # 列表中顯示的內容 def __str__(self): return "標題:{},字數:{},概要:{}".format(self.title, len(self.content), self.content[:18]) class Spider(models.Model): #自定義主鍵 # id = models.CharField(primary_key=True) date = models.DateField(u'日期') open = models.DecimalField(u'開盤價', max_digits=8, decimal_places=2) close = models.DecimalField(u'收盤價', max_digits=8, decimal_places=2) height = models.DecimalField(u'最高價', max_digits=8, decimal_places=2) low = models.DecimalField(u'最低價', max_digits=8, decimal_places=2) updownd = models.DecimalField(u'漲跌幅度', max_digits=8, decimal_places=2) turnrate = models.DecimalField(u'換手率', max_digits=8, decimal_places=2) count = models.DecimalField(u'總價', max_digits=8, decimal_places=2)
4.配置admin.py后臺管理功能擴展,將開發的模塊注冊到admin后臺管理中,可以自動賦予增刪改查能力。
我增加了兩個功能,一個博客管理,一個爬蟲管理(對爬取的內容進行修改查看刪除等操作)
from django.contrib import admin from blog.models import Blog, Spider class ContactAdmin(admin.ModelAdmin): # 增加內容時,將登陸人的賬號存入指定的字段中,models中要預留這個字段,這里是author def save_model(self, request, obj, form, change): if change: # 更新操作返回true obj.save() else: # 否則是新增 obj.author = request.user obj.save() # 設置作者字段只讀 readonly_fields = ("author",) # 過濾,只能查看操作登陸人自己創建的內容 def get_queryset(self, request): qs = super(ContactAdmin, self).get_queryset(request) if request.user.is_superuser: return qs return qs.filter(author=request.user) # listdisplay設置要顯示在列表中的字段(id字段是Django模型的默認主鍵) list_display = ('title', 'update_time', 'pub_date', 'author') # list search_fields = ('title', 'content',) # 如果只有一個值,結尾必須有一個逗號,證明是list或元組 # list_per_page設置每頁顯示多少條記錄,默認是100條 list_per_page = 5 # ordering設置默認排序字段,負號表示降序排序 ordering = ('-update_time',) # list_editable 設置默認可編輯字段,第一個字段不允許編輯 list_editable = ['pub_date', ] # fk_fields 設置顯示外鍵字段 # fk_fields = ('machine_room_id',) date_hierarchy = 'pub_date' class SpiderAdmin(admin.ModelAdmin): list_display = ('date', 'open', 'close', 'height', 'low', 'updownd', 'turnrate', 'count') # list date_hierarchy = 'date' # list_per_page設置每頁顯示多少條記錄,默認是100條 list_per_page = 20 # Register your models here. admin.site.register(Blog, ContactAdmin) admin.site.register(Spider, SpiderAdmin) # 設置登陸窗口的標題 admin.site.site_header = '屌炸天系統' # 設置頁簽標題 admin.site.site_title = '牛逼轟轟'
4.初始化admin以及創建blog和spider表
$ python manage.py migrate # 創建表結構,默認創建admin模塊表 $ python manage.py makemigrations blog # 讓 Django 知道我們在我們的模型有一些變更 $ python manage.py migrate blog # 創建自定義表結構 $ python manage.py createsuperuser #創建后臺管理員賬號
5.編寫views.py
import base64 from io import BytesIO import requests from django.http import JsonResponse from django.shortcuts import render import markdown # Create your views here. import blog.models as m import pandas as pd import matplotlib from matplotlib import pyplot as plt # 查詢 # models.UserInfo.objects.all() # models.UserInfo.objects.all().values('user') #只取user列 # models.UserInfo.objects.all().values_list('id','user') #取出id和user列,并生成一個列表 # models.UserInfo.objects.get(id=1) # models.UserInfo.objects.get(user='yangmv') # 增 # models.UserInfo.objects.create(user='yangmv',pwd='123456') # 或者 # obj = models.UserInfo(user='yangmv',pwd='123456') # obj.save() # 或者 # dic = {'user':'yangmv','pwd':'123456'} # models.UserInfo.objects.create(**dic) # 刪 # models.UserInfo.objects.filter(id=1).delete() # 改 # models.UserInfo.objects.filter(user='yangmv').update(pwd='520') # 或者 # obj = models.UserInfo.objects.get(user='yangmv') # obj.pwd = '520' # obj.save() def index(request): i = request.GET.get('id') # postdata = request.POST['id'] blog = m.Blog.objects.get(id=i) blog_content = markdown.markdown(blog.content) spider = m.Spider.objects.all().values() plot_data = showMatplot(pd.DataFrame(spider)) imb = base64.b64encode(plot_data) # 對plot_data進行編碼 ims = imb.decode() imd = "data:image/png;base64," + ims return render(request, "blog.html", {'blog': blog, 'blog_content': blog_content, 'img': imd}) def indexes(request): blogs = m.Blog.objects.all() return render(request, "blogs.html", {'blogs': blogs}) #圖標嵌入django頁面 def showMatplot(df): plt.figure(figsize=(12, 10)) # 設置圖像大小 plt.subplot(212) # 布局兩行1列的第二個 col = ['date', 'open', 'close', 'height', 'low', 'updownd', 'count'] df = df.astype( {'open': 'float', 'close': 'float', 'height': 'float', 'low': 'float', 'updownd': 'float', 'count': 'float'}) df = pd.DataFrame(df, columns=col) # print(df) # print("*" * 40) # # corr只能對數值型數據進行相關度計算 # print(df.corr()) x = pd.to_datetime(df['date']) y1 = df["open"] y2 = df["close"] y3 = df["height"] y4 = df["low"] plt.plot(x, y1, label='open', linestyle='-', c='black', linewidth=1) plt.plot(x, y2, label='close', linestyle='--', c='r', linewidth=1) plt.plot(x, y3, label='height', linestyle=':', c='g', linewidth=1) plt.plot(x, y4, label='low', linestyle='-.', c='b', linewidth=1) plt.legend() plt.subplot(211) # 布局兩行一列第一個 df1 = df.sort_values(by='date', ascending=True) # df1 = df1.iloc[30:] col = ["date", "close"] close = pd.DataFrame(df1, columns=col) data = cal_macd_system(close, 12, 26, 9) x = pd.to_datetime(data['date']) # y = pd.to_numeric(data["close"]) y1 = data["macd"] # plt.plot(x, y, label="k") plt.plot(x, y1, label="macd") plt.title("某公司股票", fontproperties=zhfont1, fontsize=15) plt.legend() buffer = BytesIO() plt.savefig(buffer) plot_data = buffer.getvalue() return plot_data #下載字體放到項目目錄中,解決圖標中文顯示 zhfont1 = matplotlib.font_manager.FontProperties(fname="FZSTK.TTF") #macd指標算法 def cal_macd_system(data, short_, long_, m): ''' data是包含高開低收成交量的標準dataframe short_,long_,m分別是macd的三個參數 返回值是包含原始數據和diff,dea,macd三個列的dataframe ''' data['diff'] = data['close'].ewm(adjust=False, alpha=2 / (short_ + 1), ignore_na=True).mean() - \ data['close'].ewm(adjust=False, alpha=2 / (long_ + 1), ignore_na=True).mean() data['dea'] = data['diff'].ewm(adjust=False, alpha=2 / (m + 1), ignore_na=True).mean() data['macd'] = 2 * (data['diff'] - data['dea']) return data #繪制macd指標曲線 def macdview(df): df1 = df.sort_values(by='date', ascending=True) # df1 = df1.iloc[30:] col = ["date", "close"] close = pd.DataFrame(df1, columns=col) data = cal_macd_system(close, 12, 26, 9) x = pd.to_datetime(data['date']) # y = pd.to_numeric(data["close"]) y1 = data["macd"] # plt.plot(x, y, label="k") plt.plot(x, y1, label="macd") plt.title("某公司股票", fontproperties=zhfont1, fontsize=15) # plt.legend() buffer = BytesIO() buffer.flush() plt.savefig(buffer) plot_data = buffer.getvalue() buffer.close() return plot_data #在線啟動爬蟲 def start_scrapy(request): # 獲取頁面傳參,要區分請求類型是POST還是GET,不同請求用不同的方法接收參數 year = request.POST.get('year') jd = request.POST.get('jd') url = 'http://127.0.0.1:6800/schedule.json' # spider是執行scrapy list返回的名稱,參數問題:除了內置key的參數外如project,spider等,其他參數均由爬蟲初始化函數的kwargs接收 # 同時jobid也有kwargs接收,**kwargs是接收字典型的參數,帶有key值的 data = {'project': 'pachong', 'spider': 'pachong_spider', 'year': year, 'jd': jd} print(requests.post(url=url, data=data)) return JsonResponse({'result': 'ok'})
在創建的應用下,創建2個文件夾,分別為static和templates,名字必須為這個,static是放靜態資源css,js,img等,templates存放模板頁面文件html等
如果想自定義路徑需要在settings.py配置你的路徑到環境中(具體配置請百度)
5.在終端中運行服務:
$python manage.py runserver 8080(不指定端口號的話默認8000)
以上就是我第一個入門級django項目的開發過程,以此記錄,激勵后期學習!后面會整理爬蟲學習的代碼也一并記錄下來。
項目源代碼:pystudy_jb51.rar
到此這篇關于python+django+mysql開發實戰(附demo)的文章就介紹到這了,更多相關python django mysql開發內容請搜索億速云以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持億速云!
到此,相信大家對“python+django+mysql開發實例分析”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。