https://guides.codepath.com/ios/Using-Git-with-Terminal
$ sudo add-apt-repository ppa:git-core/ppa -y
$ sudo apt-get update
$ sudo apt-get install git -y
Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
-> ํฐ๋ฏธ๋์์ ์๊ฒฉ๋ฆฌํฌ๋ก ํธ์ฌ๋ฅผํ๋๋ฐ ๋ก๊ทธ์ธ์ ํ๋๋ ๊ณ์ ์ค๋ฅ๊ฐ ๋ฌ๋ค
ํจ์ค์๋ ์ธ์ฆ๋ฐฉ์์ด ์๋๋ผ ํ ํฐ/ssh์ ๋ง๋ค์ด์ ์ธ์ฆํ๋ฉด ๋์ด์ ๊ฒฝ๊ณ ์ฐฝ์ด ๋จ์ง ์๋๋ค!
ํ ํฐ ๋ฐ๊ธ๋ฐ๋ ๋ฐฉ๋ฒ:
github settings -> developer settings -> personal access tokens -> generate new token -> repo, admin:repo_hook, gist, user, delete_repo ์ฒดํฌ โ -> โญ๏ธํ ํฐ ๋ณต์ฌ(๋ค์ ๋ชป๋ด!)โญ๏ธ
์ฐธ๊ณ ) https://medium.com/@joongwon/git-git-๋ช ๋ น์ด-์ ๋ฆฌ-c25b421ecdbd
# tweet/views.py
@login_required # ๋ก๊ทธ์ธํ์ง ์์ผ๋ฉด ์ ๊ทผํ ์ ์์
def tweet(request):
if request.method == 'GET': # ์์ฒญํ๋ ๋ฐฉ์์ด GET ๋ฐฉ์์ธ์ง ํ์ธํ๊ธฐ
all_tweet = TweetModel.objects.all().order_by('-created_at')
return render(request, 'tweet/home.html', {'tweet': all_tweet})
elif request.method == 'POST': # ์์ฒญ ๋ฐฉ์์ด POST ์ผ๋
user = request.user # ํ์ฌ ๋ก๊ทธ์ธ ํ ์ฌ์ฉ์๋ฅผ ๋ถ๋ฌ์ค๊ธฐ
content = request.POST.get('my-content', '') #๊ธ ์์ฑ์ด ๋์ง ์์๋ค๋ฉด ๋น์นธ์ผ๋ก
if content == '': # ๊ธ์ด ๋น์นธ์ด๋ฉด ๊ธฐ์กด tweet๊ณผ ์๋ฌ๋ฅผ ๊ฐ์ด ์ถ๋ ฅ
all_tweet = TweetModel.objects.all().order_by('-created_at')
return render(request, 'tweet/home.html', {'error': '๊ธ์ ๊ณต๋ฐฑ์ผ ์ ์์ต๋๋ค', 'tweet': all_tweet})
else:
my_tweet = TweetModel.objects.create(author=user, content=content) # ๊ธ ์ ์ฅ์ ํ๋ฒ์!
my_tweet.save()
return redirect('/tweet')
<form action="/tweet/" method="post">
{% csrf_token %}
{% if error %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endif %}
{% if user.is_authenticated %}
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
<li class="nav-item">
<a class="nav-link" href="/user"> ์น๊ตฌ <span class="sr-only"></span></a>
</li>
</ul>
</div>
{% endif %}
-> ๋ค๋น๊ฒ์ด์ ๋ฐ์ <์น๊ตฌ> ๋ถ๋ถ์ ๋ก๊ทธ์ธํ ๊ฒฝ์ฐ๋ก ๊ฐ์ธ์ค
pip install django-taggit
pip install django-taggit-templatetags2
(preference์์ ์ธํฐํ๋ฆฌํฐ๋ก๋ ์ค์น๊ฐ๋ฅ)
TAGGIT_CASE_INSENSITIVE = True
TAGGIT_LIMIT = 50
from taggit.managers import TaggableManager
class TweetModel(models.Model):
...
tags = TaggableManager(blank=True)
-> (blank=True)๋ ๋น์ด์์ด๋ ์๋ํ๊ฒ ๋จ ๋ป
-> ๋ชจ๋ธ์ด ๋ณ๊ฒฝ๋์ด์ makemigrations/migrate ํด์ db์ ๋ฐ์์์ผ์ค
elif request.method == 'POST':
...
tags = request.POST.get('tag', '').split(',')
else:
my_tweet = TweetModel.objects.create(author=user, content=content)
for tag in tags:
tag = tag.strip() # ๊ณต๋ฐฑ์ ๊ฑฐ
if tag != '': # ํ๊ทธ๋ฅผ ์์ฑํ์ง ์์์ ๊ฒฝ์ฐ์ ์ ์ฅํ์ง ์๊ธฐ ์ํด์
my_tweet.tags.add(tag)
my_tweet.save()
-> post๋ฐฉ์์ผ ๋ ๋ฐ๋ ๋ณ์๊ฐ ์ถ๊ฐ๋์์ผ๋ฏ๋ก(tags) html์์ ๋ฐ์์์ผํจ
-> tweet/home.html ์์
# tweet/views.py(ํ๊ทธํจ์์ถ๊ฐ)
from django.views.generic import ListView, TemplateView
### ์ค๊ฐ ์๋ต #############
class TagCloudTV(TemplateView):
template_name = 'taggit/tag_cloud_view.html'
class TaggedObjectLV(ListView):
template_name = 'taggit/tag_with_post.html'
model = TweetModel
def get_queryset(self):
return TweetModel.objects.filter(tags__name=self.kwargs.get('tag'))
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['tagname'] = self.kwargs['tag']
return context
# tweet/urls.py(url์ถ๊ฐ)
path('tag/', views.TagCloudTV.as_view(), name='tag_cloud'),
path('tag/<str:tag>/', views.TaggedObjectLV.as_view(), name='tagged_object_list'),
git init (๊น๊ณผ ์ฐ๋ํ๋ ํด๋๋ก ๋ง๋ค๊ธฐ)
git add . (์ด ๊ฒฝ๋ก์ ์๋ ํ์ผ ๋ค ์ฌ๋ฆผ)
git commit -m '์ปค๋ฐ๋ด์ฉ'
git branch -M main
git remote add origin https://github.com/hyojine/mySpartaSNS.git
git push -u origin main