به علت شیوع کرونا شرکت *سجادینه* جلسات خود را به صورت مجازی و در وبسایت [جیتسی](https://meet.jit.si) برگزار میکند.
شرکت *سجادینه* شامل تیمهای مختلفیست و هر عضو این شرکت دقیقا در یک تیم عضو میباشد. برای مدیریت بهتر جلسات این شرکت میخواهیم وبسایتی طراحی کنیم تا هر عضو بتواند وارد تیم خود بشود و هر تیم یک لینک مخصوص در [جیتسی](https://meet.jit.si) داشته باشد.
از شما میخواهیم ویوهای این وبسایت را با توجه به ساختار پروژه برای ما طراحی کنید.
# پروژه اولیه
پروژه اولیه را از [این لینک](/contest/assignments/21629/download_problem_initial_project/76087/) دانلود کنید.
ساختار فایلهای این پروژه به صورت زیر است.
<details class="green">
<summary>
مدلها - پیادهسازی شده است
</summary>
### مدل `Team`
این مدل نشاندهندهی تیمها میباشد.
هر تیم شامل دو فیلد زیر میباشد:
+ فیلد `name`: که از نوع *CharField* میباشد و نشاندهندهی نام تیم است.
+ فیلد `jitsi_url_path`: که از نوع *CharField* میباشد و نشاندهنده لینک اختصاصی جیتسی برای آن تیم میباشد.
### مدل `Account`
این مدل از مدل `User` ارثبری میکند و دارای یک فیلد اضافه بر `User` میباشد:
+ فیلد `team`: که از نوع *foreignkey* میباشد و نشاندهندهی شیء تیم مربوط به این فرد میباشد.
</details>
<details class="green">
<summary>
فرمها - پیادهسازی شده است
</summary>
### فرم `SignUpForm`
از این فرم باید در قسمت ثبتنام افراد در سایت استفاده شود.
### فرم `TeamForm`
از این فرم باید برای اضافه کردن یک تیم و یا اضافه شدن به یک تیم استفاده شود.
### فرم `LoginForm`
از این فرم باید برای وارد شدن کاربر به سایت استفاده شود.
</details>
<details class="yellow">
<summary>
ویوها - توسط شما پیادهسازی شود
</summary>
## ویو `home`
به این ویو فقط میتوان ریکوئست `Get` زد و این ویو برای این نوع ریکوئست باید نام تیم کاربر را نشان دهد.
اگر کاربری که به این ویو ریکوئست میزند دارای تیم بود، صفحهی `home.html` را طوری نمایش دهید که در این صفحه، نام تیم این کاربر به نمایش دربیاید.
اگر کاربری که به این ویو ریکوئست میزند تیمی نداشت، صفحهی `home.html` را طوری نمایش دهید که در این صفحه، کلمهی `None` به نمایش دربیاید.
## ویو `signup`
به این ویو میتوان دو نوع ریکوئست `Get` و `Post` زد و کار این ویو ثبتنام کردن کاربر در سایت میباشد.
اگر نوع ریکوئست کاربر `Get` باشد؛ صفحهی `signup.html` را طوری به کاربر نمایش دهید که در این صفحه فرم `SignUpForm` برای کاربر به نمایش دربیاید.
اگر نوع ریکوئست کاربر `Post` باشد؛ بعد از انجام اعتبارسنجی دادههای وارد شده در فرم، اگر فرم به درستی پر شده بود کاربر را در دیتابیس ذخیره کرده و در سایت `login` کنید و کاربر را به آدرس `team` بفرستید؛ اگر هم فرم اشتباه پر شده بود کاربر را دوباره به صفحه `signup` بازگردانید.
## ویو `login_account`
به این ویو میتوان دو نوع ریکوئست `Get` و `Post` زد و کار این ویو وارد کردن کاربر به سایت میباشد.
اگر نوع ریکوئست کاربر `Get` باشد؛ صفحهی `login.html` را طوری به او نمایش دهید که فرم `LoginForm` به نمایش دربیاید.
اگر نوع ریکوئست کاربر `Post` باشد؛ بعد از اعتبارسنجی فرم، اگر کاربر فرم را درست پر کرده بود، بررسی کنید که کاربری با اطلاعات پر شده وجود داشته باشد و اگر وجود داشت کاربر را `login` کنید و او را به صفحهی `home` بفرستید؛ در غیر این صورت او را دوباره به صفحهی `login` بازگردانید.
## ویو `logout_account`
به این ویو فقط میتوان ریکوئست `Get` زد و کار این ویو خارج کردن کاربر از حساب کاربری خود میباشد.
اگر کاربر به این ویو ریکوئست `Get` زد او را از حساب کاربری خود بیرون کنید و به صفحهی `login` منتقل کنید.
## ویو `joinoradd_team`
به این ویو میتوان دو نوع ریکوئست `Get` و `Post` زد.
اگر نوع ریکوئست کاربر `Get` باشد؛ بررسی کنید کاربر در حال حاضر دارای تیم میباشد یا خیر.
اگر کاربر تیمی داشت او را به صفحهی `home` منتقل کنید وگرنه او را طوری به صفحهی `team.html` منتقل کنید که فرم `TeamForm` به او نمایش داده شود.
اگر نوع ریکوئست کاربر `Post` باشد؛ بعد از اعتبارسنجی فرم اگر کاربر فرم را درست پر کرده بود بررسی کنید اگر تیمی با این نام وجود داشت فیلد `team` کاربر را برابر با این تیم قرار دهید؛ و اگر وجود نداشت یک تیم با این نام بسازید. فیلد `jitsi_url_path` این تیم به صورت `http://meet.jit.si/team_name` قرار گیرد که جای `team_name` نام تیم قرار میگیرد. بعد از ساخت تیم فیلد `team` کاربر را برابر با این تیم قرار دهید و کاربر را به صفحهی `home` انتقال دهید.
اگر هم فرم درست پر نشده بود کاربر را به صفحه `home` انتقال دهید.
## ویو `exit_team`
به این ویو فقط میتوان ریکوئست `Get` زد و کار این ویو خارج کردن کاربر از تیم حال حاضر آن میباشد.
اگر کاربر به این ویو ریکوئست `Get` زد فیلد `team` کاربر را برابر با `None` قرار دهید و او را به صفحهی `home` منتقل کنید. اگر هم کاربر از قبل تیمی نداشت صرفا او را به صفحهی `home` منتقل کنید.
</details>
# نکات
+ دقت کنید که تمامی ریدایرکتها را با استفاده از تابع `redirect` انجام دهید.
# آنچه باید آپلود کنید
یک فایل *ZIP* شامل پروژه جنگو خود آپلود کنید؛ توجه کنید که فقط میتوانید فایل `account/views.py` را تغییر دهید.