[PYTHON] Ein unfruchtbarer Twitter-Posting-Client, der nur Ihre Tweets speichert

Speichern Sie nur Ihre Tweets

Schließlich weiß ich nicht, wofür ich es verwenden soll, aber ich denke, dass das Spielen mit der Twitter-API die beste Lösung ist, um das Verständnis der Formularvorlagen von Django zu verbessern. Oder sagen Sie nicht, wie oft Sie mit der Twitter-API spielen. Ich habe subjektive Symptome.

Erstellen Sie ein Django-Projekt

Da Python 3.6 angenommen wird, ist das Erstellen einer virtuellen Umgebung einfach.

$ python3 -m venv pyworks
$ ls pyworks/
$ . pyworks/bin/activate

Nehmen wir weiterhin an, dass Django bereits installiert ist.

(pyworks)$ pip install requests requests_oauthlib
(pyworks)$ cd pyworks
(pyworks)$ django-admin startproject tweetsave
(pyworks)$ cd tweetsave
(pyworks)$ python manage.py startapp myapp

Es ist vorerst fertig, aber bitte besorgen Sie sich den Schlüssel usw. der Twitter-API.

Bearbeiten verschiedener Basisdateien

Fügen Sie die letzte Zeile von settings.py wie folgt hinzu (ersetzen Sie sie). Was die Medien betrifft, ist es einfacher, später darüber zu schreiben, daher ist es in Ordnung, sie diesmal zu überspringen. Ich frage mich, ob ich nur den statischen Dateiteil schreiben soll.

settings.py


LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'
USE_I18N = True
USE_L10N = True
USE_TZ = True


STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

Das gleiche gilt für urls.py, das redundant geschrieben ist, aber ich denke, ich werde es schreiben, weil in Zukunft möglicherweise "mit Mediendateien umgegangen" wird.

urls.py


from django.conf import settings
from django.conf.urls import url, include
from django.conf.urls.static import static
from django.contrib import admin

urlpatterns = [
    url(r'^myapp/', include('myapp.urls',namespace='myapp')),
    url(r'^admin/', admin.site.urls),
]
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

Da urls.py in myapp / nicht vorhanden ist, erstellen Sie eine neue.

myapp/url.py


from django.conf.urls import url
from . import views


urlpatterns = [
    url(r'^', views.index, name='index'),
]

Modelldefinition

Dieses Mal speichere ich nur meine Tweets in der Datenbank, also ist es einfach.

myapp/models.py


from django.db import models

class MyTweet(models.Model):
    tweet_words = models.CharField(max_length=140)
    created_at = models.DateTimeField(auto_now_add=True)

Da es eine große Sache ist, werde ich es auch für den Verwaltungsbildschirm schreiben.

myapp/admin.py


from django.contrib import admin
from .models import MyTweet

class MyTweetAdmin(admin.ModelAdmin):
    list_display = ('id','tweet_words','created_at')

admin.site.register(MyTweet,MyTweetAdmin)

Formularerstellung

Es ist in Ordnung, wenn Sie kein Django-Formular verwenden, aber schreiben wir das Formular. Es wird ein sehr einfaches Formular ohne optionale Beschreibung generiert.

.myapp/forms.py


from django import forms
from myapp.models import MyTweet


class TweetForm(forms.ModelForm):

    class Meta:
        model = MyTweet
        fields = ('tweet_words',)
        widgets = {
            'tweet_words': forms.Textarea()
        }

Schreiben Sie eine Ansicht

Was auch immer ich selbst sage, es ist sehr überflüssig.

myapp/views.py


from django.http.response import HttpResponse
from django.shortcuts import render, redirect
from django import forms
from myapp.models import MyTweet
from myapp.forms import TweetForm

from requests_oauthlib import OAuth1Session
import requests
import json

C_KEY = '++++++++++++++++++++++++++++++++'
C_SECRET = '++++++++++++++++++++++++++++++++'
A_KEY = '++++++++++++++++++++++++++++++++'
A_SECRET = '++++++++++++++++++++++++++++++++'

Post_API = 'https://api.twitter.com/1.1/statuses/update.json'

tw = OAuth1Session(C_KEY,C_SECRET,A_KEY,A_SECRET)

def index(request):
    form = TweetForm(request.POST or None)

    msg = request.POST.get('tweet_words')
    url = Post_API
    params = {'status': msg,'lang': 'ja'}
    req = tw.post(url, params = params)

    if request.method == 'POST':
        if form.is_valid():
            if req.status_code == 200:
                timeline = json.loads(req.text)
                form.save()
                return redirect('myapp:index')

            else:
                contexts = {
                    'Error_message': 'API eingeschränkt',
                    }
                return render(request, 'myapp/index.html', contexts)

            return redirect('myapp:index')

    result_text = MyTweet.objects.all().order_by('-id')
    contexts = {
        'form':form,
        'result_text':result_text,
    }
    return render(request, 'myapp/index.html', contexts)

Schreibe eine Vorlage

Überprüfen Sie vorher das statische Dateiverzeichnis.

スクリーンショット 2017-05-16 11.46.10.png

Platzieren Sie die Vorlagendatei in myapp / templates / myapp /. Ähnliches gilt für CSS und JS. Platziere es als myapp / static / myapp / css ~ etc.

Wenn Sie mehrere Anwendungen im selben Projekt haben, können Sie diese aufgrund von Namenskonflikten nicht finden! Dies soll verhindern.

myapp/base.html


<!DOCTYPE html>
	<html lang="ja">
	<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1">
    {% load static %}
    <link rel="stylesheet" href="{% static 'myapp/css/style.css' %}" >
    <link rel="stylesheet" href="{% static 'myapp/css/bootstrap.min.css' %}">
	</head>
	<body>
		{% block body %}
		{% endblock %}
	</body>
</html>

myapp/index.html


{% extends 'myapp/base.html' %}
{% block body %}
<div class="container">
  <div class="row">
    <div class="col-md-12">
      <div class="col-md-4">
        <form action="{% url 'myapp:index' %}" method="post">
            <div class="row">
              {% for field in form %}
              <label>{{ field.label_tag }}</label>
              <label>{{ field }}</label>
              {% endfor %}
              <input type="submit" class="btn btn-primary" value="Senden">
              {% csrf_token %}
            </div>
        </form>
      </div>
      <div class="col-md-8">
        {% include "myapp/result.html" %}
      </div>
    </div>
  </div>
</div>
{% endblock %}

myapp/result.html


{% block body %}
<ul class="row">
  {% for i in result_text %}
  <li class="box clearfix">
    <dl>
      <dt> {{ i.created_at }}</dt>
      <dd>{{ i.tweet_words }}</dd>
    </dl>
  </li>
  {% endfor %}
</ul>
{% endblock %}

migrations / migrate

Ich werde das versprochene tun.

(pyworks)$ python manage.py makemigrations myapp
(pyworks)$ python manage.py migrate

Im Bedarfsfall

(pyworks)$ python manage.py createsuperuser

Lauf

runserver und run.

スクリーンショット 2017-05-16 11.51.18.png

Was für eine unfruchtbare Anwendung ist geboren.

Recommended Posts

Ein unfruchtbarer Twitter-Posting-Client, der nur Ihre Tweets speichert
Ich habe versucht, ein System zu erstellen, das nur gelöschte Tweets abruft
Holen Sie sich nur Bild-Tweets auf Twitter
[Python] Ich habe einen Twitter-Bot erstellt, der freundschaftliche Tweets mit Markov-Kettenregeln generiert.
Mit einem Browser ausführen. Twitter-Client mit Flasche gemacht (nur POST
Ihr eigener Twitter-Client mit Django
Erstellen Sie einen Bot, der Twitter-Trends verstärkt